Cross-origin resource sharing

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Nosy man (обсуждение | вклад) в 12:09, 8 ноября 2021 (Функция «Добавить ссылку»: добавлено 10 ссылок.). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

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

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

Есть три домена, позволяющие загрузить ресурсы с сервера 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, не является уязвимой для SQL-инъекции[источник не указан 1083 дня]. С другой стороны, технология 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.

Примечания

  1. Cross-Origin Resource Sharing
  2. HTTP access control (CORS) — HTTP | MDN
  3. cross-site xmlhttprequest with CORS ✩ Mozilla Hacks — the Web developer blog
  4. Архивированная копия. Дата обращения: 24 февраля 2014. Архивировано из оригинала 19 июля 2012 года.
  5. Tony Ross, Program Manager, Internet Explorer. CORS for XHR in IE10. MSDN (9 февраля 2012).
  6. Browser fails to recognize Access-Control-Allow-Origin if it is an IDN domain - Microsoft Edge Development. developer.microsoft.com. Дата обращения: 18 сентября 2016. Архивировано из оригинала 19 сентября 2016 года.
  7. 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.