-
Notifications
You must be signed in to change notification settings - Fork 16
CORS
Cross-origin resource sharing
Совместное использование ресурсов ( CORS ) - это рабочий проект W3C, который определяет, как браузер и сервер должны взаимодействовать при доступе к внешним ресурсам ( с других доменов )
Основная идея CORS заключается в использовании пользовательских HTTP-заголовков, позволяющих обозревателю и серверу "опознать" друг друга, чтобы определить, может ли запрос быть удовлетворен
Политика безопасности в сети ограничивает возможность кросс-доменных запросов
XMLHttpRequest и Fetch API следуют политике одного источника ( same-origin policy )
т.е. приложения, использующие XMLHttpRequest и Fetch API, могут запрашивать HTTP-ресурсы только с того домена, с которого были загружены ( если они не используют CORS-заголовки )
Прежде всего следует отметить, что валидный запрос CORS всегда содержит заголовок Origin
Заголовок Origin добавляется браузером ( его нельзя подделать )
Значение этого заголовка описывает происхождение запроса: протокол ( http, ftp, file, about... ), домен ( например, tweet.com ) и порт ( включается в заголовок только в том случае, если это не порт по умолчанию, например 81 )
Все CORS-заголовки ответа сервера имеют префикс «Access-Control-»
этот заголовок должен быть включен во все валидные ответы CORS
отсутствие этого заголовка приведет к сбою запроса CORS
Значение заголовка может либо таким же, как и заголовок запроса Origin, либо "*", что означает, что запросы разрешены из любого источника
По умолчанию файлы cookie не включены в запросы CORS
Этот заголовок означает обязательность включения файлов cookie в CORS-запросы
Единственное допустимое значение для этого заголовка - true
Заголовок работает совместно с свойством withCredentials объекта XMLHttpRequest 2
Чтобы запрос CORS был успешным, оба эти свойства должны быть установлены в true
Если свойство withCredentials имеет значение true, а заголовок Access-Control-Allow-Credentials отсутствует, запрос будет отклонен, и наоборот
Объект XMLHttpRequest 2 имеет метод getResponseHeader (), который возвращает значение конкретного заголовка ответа
Во время запроса CORS метод getResponseHeader () может получить доступ только к простым заголовкам ответов
Простые заголовки ответов:
Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma
Итак, резуюмируя вышеизложенное:
Для простого запроса, который использует GET или POST без пользовательских заголовков с форматом представления ответа text/plain, запрос отправляется с дополнительным заголовком, называемым Origin
Этот заголовок должен быть возвращен сервером
в нем указывается, какие клиентские домены могут получить доступ к запрошенному ресурсу
Значение может быть:
* - разрешить любой домен
полное доменное имя ( например, https://example.com )
( если нужно, чтобы клиент передавал заголовки аутентификации, например, файлы cookie, значение не может быть * - это должен быть полностью квалифицированный домен )
Этот заголовок должен присутствовать в ответе только тогда, когда сервер поддерживает аутентификацию через файлы cookie
Единственное допустимое значение для этого случая - true
Предоставляет список значений заголовков запроса, разделенных запятыми, которые сервер хочет поддерживать
Если вы используете пользовательские заголовки ( например, x-authentication-token ), ваш сервер должен вернуть его в ответе на вызов OPTIONS, иначе запрос будет заблокирован
Аналогично, этот ответ должен содержать список заголовков, которые будут присутствовать в фактическом ответе на вызов и должны быть доступны клиенту
Все остальные заголовки будут ограничены
Разделяемый запятыми список типов HTTP-запросов ( например, GET, POST ), которые сервер хочет поддерживать
Этот заголовок является частью запроса, и будет содержать домен, из которого запущено приложение
В заголовках ответа сервера ( объект 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 |
| ⏬ |
|---|
- Блок-схема алгоритма
- Developer Tools
- Chrome DevTools
- Переменные
- Оператор typeof
- Структуры данных
- Операторы присваивания
- Логические выражения
- Условные операторы
- Инкремент
- Свойство length
- Оператор цикла for
- UTF-8
Homework
- Приведение типов
- NaN | null | Infinity
- BigInt (ES10)
- Функции
- Методы
- Методы строк
- Методы массивов
- Date ()
Самостоятельная работа
Практика (XSS)
Homework
- Циклы while и do...while
- Циклы for...of и for...in
- Параметры по умолчанию
- Объект function
Практика
Homework
- Нативные и host-объекты
- Литерал объекта
- Унаследованные свойства
- Конструктор
- Модель наследования
- Публичные и приватные свойства
- Оператор in
1
Homework
- Итерирующие методы массивов
- Тестирование производительности
- SHA
Homework
- Размеры и прокрутка элемента
- Event Loop
- async | await
- API
- REST | HATEOAS
- status codes
JSON placeholder-
JSON server
fake chat
Homework
- strict mode
- Вычисляемые имена свойств
- Краткий синтаксис методов
- Краткий литерал объекта
- Классы
Homework
- :not(:defined)
- Shadow DOM
- Custom elements
- Lifecycle hooks
- whenDefined
- <template>
- slot
1
2
3
Homework
- npm
- webpack
Упражнение 1- ES6 модули
Упражнение 2- --mode | --watch
Упражнение 3
Упражнение 4
Упражнение 5
Упражнение 6
Упражнение 7
Упражнение 8
Homework
| ⏫ |
|---|

Дополнительно
Справочная инфо
Git Bush
TCP/IP
Коды символов