Та же политика происхождения
В языках программирования на стороне клиента, таких как JavaScript и ActionScript, политика одного и того же происхождения является очень важной концепцией безопасности, имеющей большое значение для обеспечения безопасности данных. Политика одного и того же происхождения предусматривает, что междоменные сценарии изолированы. Скрипты в одном домене не могут получать доступ к большинству свойств и методов другого домена и управлять ими. Так что же такое один и тот же домен и что такое другой домен? Когда два домена имеют одинаковый протокол (например, http), один и тот же порт (например, 80) и один и тот же хост (например, www.example.org), мы можем считать их одним и тем же доменом. Например, http://www.example.org/index.html и http://www.example.org/sub/index.html находятся в одном домене, а http://www.example.org, https ://www Любые два домена .example.org, http://www.example.org:8080, http://sub.example.org будут представлять собой междоменный домен. Политика одного и того же происхождения также должна обрабатывать некоторые особые ситуации, такие как ограничение прав доступа сценариев в соответствии с файловым протоколом. Локальные HTML-файлы открываются в браузере через файловый протокол. Если сценарий может получить доступ к любым другим файлам на жестком диске через файловый протокол, возникнут угрозы безопасности. В настоящее время IE8 все еще имеет такие риски.
В соответствии с той же политикой происхождения междоменное совместное использование ресурсов будет ограничено. Однако с учетом практики людей и развития браузеров в настоящее время накоплено и накоплено много ценного опыта в навыках междоменных запросов. Здесь я делю междоменное совместное использование ресурсов на два типа: один — односторонний запрос данных, а другой — двусторонняя передача сообщений. Далее я перечислю некоторые распространенные междоменные методы. Исходный код следующих междоменных примеров можно получить здесь .
Односторонний междоменный доступ
JSONP
JSONP (JSON с дополнением) — это простой и эффективный междоменный метод. Тег сценария в HTML может загружать и выполнять JavaScript из других доменов, поэтому мы можем динамически загружать ресурсы из других доменов с помощью тегов сценария. Например, если я хочу загрузить данные домена B со страницы pageA домена A, то на странице pageB домена B я объявляю данные, требуемые страницей A, в форме JavaScript, а затем использую тег скрипта в pageA для загрузки страницы B, затем на странице B. Сценарий будет выполнен. На этой основе JSONP добавляет функцию обратного вызова. После загрузки страницы B будет выполнена функция, определенная на странице A, и необходимые данные будут переданы в функцию в виде параметров. JSONP легко реализовать, но существуют некоторые риски для безопасности. Если сторонний сценарий выполняется по желанию, он может изменить содержимое страницы и перехватить конфиденциальные данные. Но при передаче данных между доверенными сторонами JSONP — очень подходящий выбор.
Flash URL-загрузчик
Flash имеет собственный набор политик безопасности. Сервер может использовать файл crossdomain.xml, чтобы объявить, к каким файлам домена можно получить доступ. SWF также может использовать API, чтобы определить, какие домены могут быть загружены. При доступе к ресурсам в разных доменах, например при запросе данных в домене www.b.com из домена www.a.com, мы можем использовать Flash для отправки HTTP-запросов. Сначала измените файл crossdomain.xml на домене www.b.com (обычно он хранится в корневом каталоге, если нет необходимости создавать его вручную), добавьте www.a.com в белый список. Во-вторых, HTTP-запрос отправляется через Flash URLLoader, и, наконец, результат ответа передается в JavaScript через Flash API. Flash URLLoader — очень распространенное междоменное решение, но если ему нужна поддержка iOS, это решение ничего не может сделать.
Контроль доступа
Контроль доступа — это более совершенный междоменный метод. В настоящее время он поддерживается только в нескольких браузерах. Эти браузеры могут отправлять междоменный HTTP-запрос (Firefox, Google Chrome и т. д. реализованы через XMLHTTPRequest, а IE8 — через XDomainRequest). ). Ответ на запрос должен включать HTTP-заголовок ответа Access-Control-Allow-Origin, который заявляет о доступности запрошенного домена. Например, www.a.com отправляет междоменный HTTP-запрос на assets.php под www.b.com , затем assets.php должен добавить следующий заголовок ответа:
header("Access-Control-Allow-Origin: http://www.a.com");