Jump to content

Совместное использование ресурсов между источниками

Совместное использование ресурсов между источниками ( CORS ) — это механизм, который позволяет веб-странице получать доступ к ограниченным ресурсам с сервера в домене, отличном от домена, который обслуживал веб-страницу.

Веб-страница может свободно встраивать изображения, таблицы стилей, сценарии, iframe и видео из разных источников. Определенные «междоменные» запросы, особенно запросы Ajax , по умолчанию запрещены политикой безопасности одного и того же источника. CORS определяет способ взаимодействия браузера и сервера, чтобы определить, безопасно ли разрешить запрос между источниками. [1] Он обеспечивает больше свободы и функциональности, чем запросы с одним и тем же источником, но более безопасен, чем просто разрешение всех запросов из разных источников.

Спецификация CORS включена в документ Fetch Living Standard группы WHATWG. [2] Эта спецификация описывает, как CORS в настоящее время реализован в браузерах. [3] Более ранняя спецификация была опубликована как Рекомендация W3C . [4]

Технический обзор

[ редактировать ]
Путь XMLHttpRequest (XHR) через CORS.

Для HTTP-запросов, сделанных из JavaScript, которые невозможно выполнить с помощью тега <form>, указывающего на другой домен или содержащего заголовки, не внесенные в безопасный список, спецификация требует, чтобы браузеры «предварительно обрабатывали» запрос, запрашивая поддерживаемые методы с сервера с помощью HTTP-запроса. OPTIONS, а затем, после «одобрения» сервером, отправка фактического запроса с использованием фактического метода HTTP-запроса. Серверы также могут уведомлять клиентов о том, следует ли отправлять «учетные данные» (включая файлы cookie и данные HTTP-аутентификации) вместе с запросами. [5]

Простой пример запроса

[ редактировать ]

Предположим, пользователь посещает http://www.example.com, и страница пытается выполнить запрос между источниками для получения данных с http://service.example.com. CORS-совместимый браузер попытается отправить запрос к сервису service.example.com из другого источника следующим образом.

  1. Браузер отправляет запрос GET с дополнительным Origin HTTP-заголовок на service.example.com, содержащий домен, который обслуживал родительскую страницу:
    Origin: http://www.example.com
  2. Сервер service.example.com отправляет один из этих трех ответов:
    • Запрошенные данные вместе с Access-Control-Allow-Origin (ACAO) в своем ответе, указывающий, что запросы от источника разрешены. Например, в этом случае должно быть:
      Access-Control-Allow-Origin: http://www.example.com
    • Запрошенные данные вместе с Access-Control-Allow-Origin (ACAO) с подстановочным знаком, указывающим, что запросы со всех доменов разрешены:
      Access-Control-Allow-Origin: *
    • Страница ошибки, если сервер не разрешает запрос между источниками [6]

Политика одинакового происхождения с подстановочными знаками подходит, когда страница или ответ API должны быть доступны для любого кода на любом сайте. свободно доступный веб-шрифт на общедоступном хостинге, таком как Google Fonts Примером может служить .

Политика одинакового происхождения с подстановочными знаками также широко и уместно используется в модели возможностей объектов , где страницы имеют неугадываемые URL-адреса и предназначены для доступа к любому, кто знает секрет. [ оригинальное исследование? ]

Значение «*» является особенным, поскольку оно не позволяет запросам на предоставление учетных данных, а это означает, что оно не позволяет отправлять HTTP-аутентификацию, клиентские SSL-сертификаты или файлы cookie в междоменном запросе. [7]

Обратите внимание, что в архитектуре CORS заголовок Access-Control-Allow-Origin устанавливается внешней веб-службой ( service.example.com ), а не исходным сервером веб-приложений ( www.example.com ). Здесь service.example.com использует CORS, чтобы разрешить браузеру авторизовать www.example.com для выполнения запросов к service.example.com .

Если на сайте указан заголовок «Access-Control-Allow-Credentials:true», сторонние сайты могут выполнять привилегированные действия и получать конфиденциальную информацию.

Предполетный пример

[ редактировать ]

При выполнении определенных типов междоменных запросов Ajax современные браузеры, поддерживающие CORS, инициируют дополнительный «предварительный» запрос, чтобы определить, есть ли у них разрешение на выполнение действия. Запросы между источниками предварительно обрабатываются таким образом, поскольку они могут иметь последствия для пользовательских данных.

OPTIONS /
Host: service.example.com
Origin: http://www.example.com
Access-Control-Request-Method: PUT

Если service.example.com желает принять действие, он может ответить следующими заголовками:

Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: PUT

Затем браузер выполнит фактический запрос. Если service.example.com не принимает межсайтовые запросы от этого источника, он ответит ошибкой на запрос OPTIONS, и браузер не выполнит фактический запрос.

Заголовки

[ редактировать ]

Заголовки HTTP, относящиеся к CORS:

Заголовки запросов

[ редактировать ]
  • Origin
  • Access-Control-Request-Method
  • Access-Control-Request-Headers

Заголовки ответов

[ редактировать ]
  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers

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

[ редактировать ]

CORS поддерживается всеми браузерами на основе следующих механизмов компоновки:

Поддержка перекрестного происхождения была первоначально предложена Мэттом Ошри, Брэдом Портером и Майклом Боделлом из Tellme Networks в марте 2004 года для включения в VoiceXML 2.1. [19] чтобы разрешить безопасные запросы данных между источниками браузерами VoiceXML. Этот механизм считался общим по своей природе, а не специфичным для VoiceXML, и впоследствии был выделен в ПРИМЕЧАНИЕ реализации. [20] Рабочая группа W3C по веб-приложениям при участии основных поставщиков браузеров начала оформлять ПРИМЕЧАНИЕ в рабочий проект W3C, стремясь к официальному статусу Рекомендации W3C .

В мае 2006 года был представлен первый рабочий проект W3C. [21] В марте 2009 года проект был переименован в «Обмен ресурсами между источниками». [22] а в январе 2014 года он был принят как рекомендация W3C. [23]

CORS против JSONP

[ редактировать ]

CORS можно использовать как современную альтернативу шаблону JSONP . Преимущества CORS:

  • Хотя JSONP поддерживает только GET метода запроса, CORS также поддерживает другие типы HTTP-запросов.
  • CORS позволяет веб-программисту использовать обычный XMLHttpRequest , который поддерживает лучшую обработку ошибок, чем JSONP.
  • Хотя JSONP может вызвать проблемы с межсайтовым скриптингом (XSS) , когда внешний сайт взломан, CORS позволяет веб-сайтам вручную анализировать ответы для повышения безопасности. [1]

Основным преимуществом JSONP была его способность работать в устаревших браузерах, которые появились до поддержки CORS ( Opera Mini и Internet Explorer 9 и более ранних версий). CORS теперь поддерживается большинством современных веб-браузеров. [24]

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б «Междоменный Ajax с разделением ресурсов между источниками» . NCZОнлайн. 25 мая 2010 года . Проверено 5 июля 2012 г.
  2. ^ «Повысьте уровень жизни» .
  3. ^ «Протокол рабочей группы WebAppSec» .
  4. ^ «Обмен ресурсами между источниками» .
  5. ^ «Обмен ресурсами между источниками (CORS) — HTTP | MDN» . http://developer.mozilla.org . 10 мая 2023 г. Проверено 7 июня 2023 г.
  6. ^ «Ошибки CORS — HTTP | MDN» . http://developer.mozilla.org . 10 мая 2023 г. Проверено 4 июля 2023 г.
  7. ^ [1] . W3.org. Проверено 31 июля 2021 г.
  8. ^ Перейти обратно: а б «Мигните» . Блог причуд. Апрель 2013 года . Проверено 4 апреля 2013 г.
  9. ^ «Google идет своим путем, создавая движок рендеринга WebKit» . Арс Техника. Апрель 2013 года . Проверено 4 апреля 2013 г.
  10. ^ «Контроль доступа HTTP (CORS) — MDN» . Разработчик.mozilla.org. Архивировано из оригинала 27 мая 2010 г. Проверено 5 июля 2012 г.
  11. ^ «Геккон-МДН» . Разработчик.mozilla.org. 08.06.2012. Архивировано из оригинала 3 августа 2012 г. Проверено 5 июля 2012 г.
  12. ^ Тони Росс; Менеджер программы; Интернет Эксплорер (9 февраля 2012 г.). «CORS для XHR в IE10» . MSDN . Проверено 14 декабря 2012 г.
  13. ^ «межсайтовый xmlhttprequest с CORS» . МОЗИЛЛА . Проверено 5 сентября 2012 г.
  14. ^ Дэвид Хоннеффер, специалист по документации (14 июня 2012 г.). «12.00 для журнала изменений UNIX» . Опера. Архивировано из оригинала 18 июня 2012 г. Проверено 5 июля 2012 г.
  15. ^ Дэвид Хоннеффер, специалист по документации (23 апреля 2012 г.). «Программное обеспечение Opera: поддержка веб-спецификаций в Opera Presto 2.10» . Opera.com . Проверено 5 июля 2012 г.
  16. ^ 6 июля 2009 г., автор Арун Ранганатан (6 июля 2009 г.). «межсайтовый запрос xmlhttprequest с CORS ✩ Mozilla Hacks — блог веб-разработчиков» . Hacks.mozilla.org . Проверено 5 июля 2012 г. {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  17. ^ «59940: Обход совместного использования ресурсов Apple Safari WebKit между источниками» . Osvdb.org. Архивировано из оригинала 19 июля 2012 г. Проверено 5 июля 2012 г.
  18. ^ «Руководство по разработке Microsoft Edge» . 21 декабря 2023 г.
  19. ^ «Расширяемый язык разметки голоса (VoiceXML) 2.1» . W3.org. 23 марта 2004 г. Проверено 5 июля 2012 г.
  20. ^ «Разрешение доступа на чтение к содержимому XML с использованием инструкции обработки <?access-control?> 1.0» . W3.org . Проверено 5 июля 2012 г.
  21. ^ «Разрешение доступа на чтение к XML-контенту с использованием инструкции обработки <?access-control?> 1.0 W3C — рабочий проект, 17 мая 2006 г.» . W3.org . Проверено 17 августа 2015 г.
  22. ^ «Обмен ресурсами между источниками — рабочий проект W3C, 17 марта 2009 г.» . W3.org . Проверено 17 августа 2015 г.
  23. ^ «Обмен ресурсами между источниками — рекомендация W3C от 16 января 2014 г.» . W3.org . Проверено 17 августа 2015 г.
  24. ^ «Когда я могу использовать... совместное использование ресурсов Cross Origin» . caniuse.com . Проверено 12 июля 2012 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 548295dbb1b5d335f02b46f087cfe407__1722372120
URL1:https://arc.ask3.ru/arc/aa/54/07/548295dbb1b5d335f02b46f087cfe407.html
Заголовок, (Title) документа по адресу, URL1:
Cross-origin resource sharing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)