Междоменный обходной путь для загрузки внешней страницы

0

Здесь документация jQuery:
http://api.jquery.com/load/

Как уже упоминалось, в качестве дополнительной заметки:

Из-за ограничений безопасности браузера большинство запросов "Ajax" подчиняются одной и той же политике происхождения; запрос не может успешно извлекать данные из другого домена, субдомена или протокола.

Есть ли способ обойти это ограничение?

Теги:

2 ответа

0

Да, есть несколько способов обойти это. Но я бы настоятельно предложил использовать CORS (совместное использование ресурсов между доменами). CORS является новым стандартом для адресации междоменного Ajax. Это заменяет такие подходы, как JSONP (с известными проблемами безопасности).

К сожалению, CORS не поддерживается более старыми версиями IE (6-9), но существуют установленные полисы для браузеров, которые не внедряют CORS. easyXDM - один такой полиполк.

На базовом уровне ниже приведен пример запроса (по ссылке MDN выше), где браузер генерирует запрос с заголовком Origin, указывающий домен запроса, который проверяется конечной точкой:

GET /resources/access-control-with-credentials/ HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://foo.example/examples/credential.html
Origin: http://foo.example
Cookie: pageAccess=2

Конечная точка Ajax, поддерживающая CORS, может отвечать соответствующими заголовками, которые браузер проверяет. См. Access-Control-Allow-Origin и Access-Control-Allow-Credentials в этом примере:

HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:34:52 GMT
Server: Apache/2.0.61 (Unix) PHP/4.4.7 mod_ssl/2.0.61 OpenSSL/0.9.7e mod_fastcgi/2.4.2 DAV/2 SVN/1.4.2
X-Powered-By: PHP/5.2.6
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Pragma: no-cache
Set-Cookie: pageAccess=3; expires=Wed, 31-Dec-2008 01:34:53 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 106
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/plain

Браузер также может отправить предварительный полет (используя глагол OPTIONS), который может указать серверу, какие заголовки или глаголы будут использовать вызов Ajax. Предполетный фактически представляет собой отдельный вызов от первичного вызова Ajax, но он вызывается только при определенных условиях.

Многие веб-серверы (IIS, Apache) поддерживают CORS через модули. Серверу потребуется конфигурация для источников белого списка, допустимых глаголов, заголовков и т.д. Подстановочные знаки также могут использоваться, но не рекомендуется.

  • 0
    CORS выглядит многообещающе, но я бы очень признателен, если бы вы предоставили Fiddle, чтобы я знал, как использовать его в действии. Спасибо!
  • 0
    Для браузеров, которые поддерживают CORS, клиент (браузер) отправит предварительный запрос, который является своего рода рукопожатием перед основным запросом, или фактически запрос немедленно в зависимости от глагола HTTP, участвуют ли пользовательские заголовки запроса и т. Д. Сервер, обслуживающий ответ Ajax, также должен будет поддерживать CORS, отвечая соответствующими заголовками и фактическими данными ответа.
0

Один из способов - создать страницу прокси, которая запрашивает внешнюю страницу на сервере. Реализация зависит от используемой технологии, но идея состоит в том, что вы можете затем сделать аякс-вызов на свою прокси-страницу, которая будет находиться в том же домене, что и вызывающая страница.

  • 0
    Спасибо за ответ! « Одним из способов является создание прокси-страницы, которая запрашивает внешнюю страницу на сервере. » Как я могу сделать это, например, с помощью PHP ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню