CORS (Cross-Origin Resource Sharing)

Это ситуация, с которой сталкивается каждый, кто разрабатывает клиентское приложение (angular, react, vue …), когда он делает api запрос в процессе разработки. Хотя CORS (Cross Origin Resource Sharing) на самом деле известен как создание безопасных запросов, именно политика Same Origin Policy выполняет эту работу здесь, и это можно растянуть с помощью CORS.

CORS-запросы

http-запросы к различным источникам, где может применяться CORS;

  • XmlHttpRequest и Fetch api запросы,

  • Запросы шрифта в css с помощью @font-face,

  • Текстуры Webgl

  • В методе drawImage используется на Canvas.

Он был разработан для обеспечения безопасной среды для конечного пользователя с помощью браузера, а введение некоторых ограничений в момент отправки запроса к другому источнику называется Same Origin Policy. Упомянутое здесь Происхождение соответствует следующим трем утверждениям.

  • Протокол

  • Хозяин

  • Порт

Если одно из этих трех значений отличается, это означает другое происхождение.
В качестве примера рассмотрим таблицу ниже.

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

Простая просьба

Это название, которое mdn дает запросам, не требующим предполетной обработки. Простой запрос должен обеспечивать все следующие характеристики.

  • Методы
    • Получить
    • Пост
    • Глава
  • Заголовки, отличные от запрещенных заголовков в спецификации HeadersFetch
    • Принять
    • Accept-Language
    • Content-Language
    • Content-Type
  • Content-Type
    • application/x-www-form-urlencoded
    • multipart/form-data
    • текст/plain

Запрос на предполетную подготовку

Предварительный запрос можно рассматривать как предварительный запрос, отправляемый браузером на сервер с помощью метода OPTIONS. В соответствии с ответом, полученным в результате этого запроса, фактический запрос отправляется на сервер или нет. Запрос на предполетную подготовку выполняется при наличии любого из следующих признаков.

  • Методы, отличные от методов Get, Post, Head (Put, Delete, Options, Patch и т.д.)

  • любой представленный content-type(application/json), отличный от application/x-www-form-urlencoded, multipart/form-data или text/plain

Запрос и ответ на предполётную подготовку

OPTIONS /doc HTTP/1.1
Origin: http://sample.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: application/json, Content-Type
Войдите в полноэкранный режим Выход из полноэкранного режима
Access-Control-Allow-Origin: https://sample.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: applicaiton/json, Content-Type
Войдите в полноэкранный режим Выход из полноэкранного режима

Если в ответ приходит следующий заголовок, это означает, что ограничения происхождения нет.
Access-Control-Allow-Origin : *

В итоге можно сказать, что утверждение CORS фактически делает запрещенную ситуацию доступной с разрешениями. Поскольку политика одинакового происхождения, применяемая для конечного пользователя, который должен быть защищен, будет незаменима, CORS вступает в игру здесь и гарантирует, что соответствующий запрос будет отброшен. Для повторения запросов разного происхождения, о которых мы говорили здесь, активируется политика Same Origin Policy, если они поступают через браузер.

Источники

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/cors_principle.png

  • https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.1

Оцените статью
Procodings.ru
Добавить комментарий