Interested Article - Cross-origin resource sharing

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

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

Есть три домена , позволяющие загрузить ресурсы с сервера 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

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

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

Соотношение CORS и JSONP

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

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

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

Примечания

  1. . Дата обращения: 22 ноября 2013. 6 марта 2017 года.
  2. . Дата обращения: 24 февраля 2014. 21 февраля 2014 года.
  3. . Дата обращения: 24 февраля 2014. 11 сентября 2019 года.
  4. . Дата обращения: 24 февраля 2014. Архивировано из 19 июля 2012 года.
  5. Tony Ross, Program Manager, Internet Explorer. . MSDN (9 февраля 2012). Дата обращения: 2 декабря 2015. 5 декабря 2015 года.
  6. . developer.microsoft.com. Дата обращения: 18 сентября 2016. Архивировано из 19 сентября 2016 года.
  7. . Дата обращения: 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 .
Источник —

Same as Cross-origin resource sharing