WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Cross-origin resource sharing (CORS; с англ.«совместное использование ресурсов между разными источниками») — технология современных браузеров, которая позволяет предоставить веб-странице доступ к ресурсам другого домена. До недавнего времени основным способом преодоления ограничений, наложенных в same-origin-policy относительно XSS запросов, было использование JSONP. Сам JSONP имеет неустранимое ограничение — позволяет только получение данных GET методом, то есть отправка данных через POST метод остается недоступной.

Суть технологии CORS

Flowchart showing Simple and Preflight XHR

Сама технология достаточно проста. Есть три домена, желающие загрузить ресурсы с сервера Z. Для того чтобы это стало возможным, веб-серверу Z, который отдает контент, достаточно указать в заголовке ответа Access-Control-Allow-Origin список доверенных доменов: A, B, C. Тогда для страниц этих доменов, ограничения принципа одинакового источника на запрашиваемые страницы, не будут действовать:

Access-Control-Allow-Origin: A, B, C

После этого страницы серверов A, B, C смогут загружать контент с сервера Z.

Для PHP это реализуется вызовом функции header():

<?php
    header("Access-Control-Allow-Origin: http://example.com");
?>

Упрощённый пример

Для инициации Cross-origin запроса браузер клиента добавляет в HTTP запрос Origin (домен сайта, с которого происходит запрос). Например страница http://www.a.com/page.html пытается получить данные со страницы http://www.b.com/cors.txt. В случае если браузер клиента поддерживает технологию CORS, запрос будет выглядеть так:

GET /cors.txt HTTP/1.1
Host: www.b.com
Origin: www.a.com

Если сервер www.b.com хочет разрешить получение данных с www.a.com то в ответе сервера будет присутствовать строчка:

Access-Control-Allow-Origin: http://www.a.com

Если в ответе сервера отсутствует данная строка, то браузер поддерживающий технологию CORS, передаст ошибку вместо данных.

В случае, если сервер хочет разрешить доступ любому домену, он может указать в ответе:

Access-Control-Allow-Origin: *

Если сервер хочет разрешить доступ более чем одному домену, то в ответе сервера должно быть по одной строчке Access-Control-Allow-Origin для каждого домена.

Access-Control-Allow-Origin: http://www.a.com
Access-Control-Allow-Origin: http://www.b.com
Access-Control-Allow-Origin: http://www.c.com


На практике чаще используется запись из нескольких доменов, разделенных пробелом[1]:

 Access-Control-Allow-Origin: http://www.a.com http://www.b.com http://www.c.com

Отношение CORS к JSONP

Технология CORS может быть использована как более современная и надёжная альтернатива JSONP, так как позволяет использовать все преимущества XMLHttpRequest, и не имеет риска инъекции, как JSONP. С другой стороны, технология CORS поддерживается только современными браузерами, а JSONP работает и в старых тоже.

Поддержка браузерами

  • Gecko 1.9.1 (Firefox 3.5[2], SeaMonkey 2.0) и выше.
  • WebKit (Safari 4 и выше[3], Google Chrome 3 и выше[4], возможно более ранние).
  • MSHTML/Trident 6.0 (Internet Explorer 10) имеет встроенную поддержку[5], MSHTML/Trident 4.0 и 5.0 (Internet Explorer 8 и 9) предоставляет частичную поддержку через XDomainRequest объект. Браузеры Internet Explorer 10 и 11, согласно имеющимся баг-репортам[6], не поддерживают CORS для интернациональных доменных имен (IDN), содержащих нелатинские символы.
  • Presto браузеры (Opera) CORS реализован в Opera 12.00[7] и Opera Mobile 12, но не в Opera Mini.

Примечания

Литература

  • Monsur Hossain. CORS in Action: Creating and consuming cross-origin APIs. — Manning Publications Company, 2014. — 240 p. ISBN 978-1-61729-182-1.
  • Mike Shema. Hacking Web Apps: Detecting and Preventing Web Application Security Problems. — Newnes, 2012. — P. 3-6. ISBN 978-1-59749-951-4.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии