Skip to content
garevna edited this page Oct 21, 2018 · 11 revisions

🎓 CORS

Cross-origin resource sharing

Политика безопасности в сети ограничивает возможность кросс-доменных запросов

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

Суть CORS заключается в использовании дополнительных заголовков, позволяющих обозревателю и серверу "опознать" друг друга, чтобы определить, может ли запрос быть удовлетворен

XMLHttpRequest и Fetch API следуют политике одного источника ( same-origin policy )

т.е. приложения могут запрашивать HTTP-ресурсы только с того домена, с которого были загружены ( если они не используют CORS-заголовки )

Валидный CORS-запрос всегда содержит заголовок Origin

Заголовок Origin добавляется браузером ( его нельзя подделать )

Значение этого заголовка описывает происхождение запроса: протокол ( http, ftp, file, about... ), домен ( например, tweet.com ) и порт ( включается в заголовок только в том случае, если это не порт по умолчанию, например 81 )

Все CORS-заголовки ответа сервера имеют префикс «Access-Control-»

📦 Access-Control-Allow-Origin ( обязательный )

этот заголовок должен быть включен во все валидные ответы CORS

отсутствие этого заголовка приведет к сбою запроса CORS

Значение заголовка может либо таким же, как и заголовок запроса Origin, либо "*", что означает, что запросы разрешены из любого источника

📦 Access-Control-Allow-Credentials ( необязательный )

По умолчанию файлы cookie не включены в запросы CORS

Этот заголовок означает обязательность включения файлов cookie в CORS-запросы

Единственное допустимое значение для этого заголовка - true

Заголовок работает совместно с свойством withCredentials объекта XMLHttpRequest 2

Чтобы запрос CORS был успешным, оба эти свойства должны быть установлены в true

Если свойство withCredentials имеет значение true, а заголовок Access-Control-Allow-Credentials отсутствует, запрос будет отклонен, и наоборот

📦 Access-Control-Expose-Headers ( необязательный )

Объект XMLHttpRequest 2 имеет метод getResponseHeader (), который возвращает значение конкретного заголовка ответа

Во время запроса CORS метод getResponseHeader () может получить доступ только к простым заголовкам ответов

Простые заголовки ответов:

 Cache-Control
 Content-Language
 Content-Type
 Expires
 Last-Modified
 Pragma

Итак, резуюмируя вышеизложенное:

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

Для простого запроса, который использует GET или POST без пользовательских заголовков с форматом представления ответа text/plain, запрос отправляется с дополнительным заголовком, называемым Origin

🎓 Заголовки

📦 Access-Control-Allow-Origin

Этот заголовок должен быть возвращен сервером

в нем указывается, какие клиентские домены могут получить доступ к запрошенному ресурсу

Значение может быть:

* - разрешить любой домен полное доменное имя ( например, https://example.com ) ( если нужно, чтобы клиент передавал заголовки аутентификации, например, файлы cookie, значение не может быть * - это должен быть полностью квалифицированный домен )

📦 Access-Control-Allow-Credentials

Этот заголовок должен присутствовать в ответе только тогда, когда сервер поддерживает аутентификацию через файлы cookie

Единственное допустимое значение для этого случая - true

📦 Access-Control-Allow-Headers

Предоставляет список значений заголовков запроса, разделенных запятыми, которые сервер хочет поддерживать

Если вы используете пользовательские заголовки ( например, x-authentication-token ), ваш сервер должен вернуть его в ответе на вызов OPTIONS, иначе запрос будет заблокирован

📦 Access-Control-Expose-Headers

Аналогично, этот ответ должен содержать список заголовков, которые будут присутствовать в фактическом ответе на вызов и должны быть доступны клиенту

Все остальные заголовки будут ограничены

📦 Access-Control-Allow-Methods

Разделяемый запятыми список типов HTTP-запросов ( например, GET, POST ), которые сервер хочет поддерживать

Origin

Этот заголовок является частью запроса, и будет содержать домен, из которого запущено приложение

⚠️ По соображениям безопасности браузеры не позволят перезаписать его значение

В заголовках ответа сервера ( объект headers ) есть свойство Host ( куда был направлен запрос ) и свойство Origin ( указывает на домен, с которого пришел запрос )

Свойство Referer указывает полный адрес ресурса, с которого пришел запрос

Если сделать запрос с пустой страницы ( не имеющей адреса в сети ), то в заголовках ответа сервера свойство Origin будет иметь значение null, а свойство Referer будет отсутствовать


© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав


Новая версия


1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19

Занятие 1

⤵️

Занятие 2

⤴️ ⤵️

Занятие 3

⤴️ ⤵️

Занятие 4

⤴️ ⤵️

Занятие 5

⤴️ ⤵️

Занятие 6

⤴️ ⤵️

Занятие 7

⤴️ ⤵️

Занятие 8

⤴️ ⤵️

Занятие 9

⤴️ ⤵️

Занятие 10

⤴️ ⤵️

Занятие 11

⤴️ ⤵️

Занятие 12

⤴️ ⤵️

Занятие 13

⤴️ ⤵️

Занятие 14

⤴️ ⤵️

Занятие 15

⤴️ ⤵️

Занятие 16

⤴️ ⤵️

Занятие 17

⤴️ ⤵️

Занятие 18

⤴️ ⤵️

Занятие 19

⤴️ ⤵️

⤴️

ico20 Дополнительно
dir-20 Справочная инфо

Clone this wiki locally