Cross-origin resource sharing (Cross-origin resource sharing)
Cross-origin resource sharing (CORS; с англ. — «совместное использование ресурсов между разными источниками») — технология современных браузеров, которая позволяет предоставить веб-страницам доступ к ресурсам другого домена.
Суть технологии CORS
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Flowchart_showing_Simple_and_Preflight_XHR.svg/220px-Flowchart_showing_Simple_and_Preflight_XHR.svg.png)
Есть три домена, позволяющие загрузить ресурсы с сервера U. Для того, чтобы это стало возможным, веб-серверу U, который отдает контент, достаточно указать в заголовке ответа Access-Control-Allow-Origin список доверенных доменов: A, B, C. Тогда для страниц этих доменов не будут действовать ограничения принципа одинакового источника на запрашиваемые страницы:
Access-Control-Allow-Origin: A, B, C
После этого, страницы доменов A, B, C смогут загружать контент с сервера U.
Для 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, не является уязвимой для SQL-инъекции[источник не указан 1136 дней]. С другой стороны, технология 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.
Примечания
[править | править код]- ↑ Cross-Origin Resource Sharing . Дата обращения: 22 ноября 2013. Архивировано 6 марта 2017 года.
- ↑ HTTP access control (CORS) — HTTP | MDN . Дата обращения: 24 февраля 2014. Архивировано 21 февраля 2014 года.
- ↑ cross-site xmlhttprequest with CORS ✩ Mozilla Hacks — the Web developer blog . Дата обращения: 24 февраля 2014. Архивировано 11 сентября 2019 года.
- ↑ Архивированная копия . Дата обращения: 24 февраля 2014. Архивировано из оригинала 19 июля 2012 года.
- ↑ Tony Ross, Program Manager, Internet Explorer. CORS for XHR in IE10 . MSDN (9 февраля 2012). Дата обращения: 2 декабря 2015. Архивировано 5 декабря 2015 года.
- ↑ Browser fails to recognize Access-Control-Allow-Origin if it is an IDN domain - Microsoft Edge Development . developer.microsoft.com. Дата обращения: 18 сентября 2016. Архивировано из оригинала 19 сентября 2016 года.
- ↑ Opera: Opera 12.00 for UNIX Changelog . Дата обращения: 24 февраля 2014. Архивировано из оригинала 18 июня 2012 года.
Литература
[править | править код]- 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.
Для улучшения этой статьи желательно:
|