Я пытаюсь понять, как использовать CORS, и я не совсем понимаю, что Access-Control-Allow-Credentials
делает заголовок.
В документации сказано
Указывает, может ли быть предоставлен ответ на запрос, если флаг учетных данных имеет значение true.
Но я не понимаю, что означает «разоблачение» ответа.
Кто-нибудь может объяснить, что на самом деле делает этот заголовок, установленный в true (в сочетании с флагом credentials, установленным в true)?
http-headers
cors
Nate
источник
источник
Ответы:
По умолчанию CORS не включает файлы cookie в запросах разных источников. Это отличается от других методов перекрестного происхождения, таких как JSON-P. JSON-P всегда включает файлы cookie с запросом, и это может привести к классу уязвимостей, называемому подделкой межсайтовых запросов или CSRF.
Чтобы снизить вероятность появления уязвимостей CSRF в CORS, CORS требует, чтобы и сервер, и клиент подтвердили, что разрешено включать файлы cookie в запросы. Это делает куки активным решением, а не тем, что происходит пассивно без какого-либо контроля.
Код клиента должен установить
withCredentials
свойство наXMLHttpRequest
дляtrue
того, чтобы дать разрешение.Однако одного этого заголовка недостаточно. Сервер должен ответить
Access-Control-Allow-Credentials
заголовком. Ответ с этим заголовкомtrue
означает, что сервер разрешает использование файлов cookie (или других учетных данных пользователя) в запросах разных источников.Вы также должны убедиться, что ваш браузер не блокирует сторонние файлы cookie, если вы хотите, чтобы работали запросы с учетными данными из разных источников.
Обратите внимание, что независимо от того, делаете ли вы запросы одного и того же происхождения или запросы из разных источников, вам необходимо защитить свой сайт от CSRF (особенно, если ваш запрос включает файлы cookie).
источник
withCredentials
предварительной проверки браузер просто всегда делает запрос, отправляя файлы cookie, если он установлен, но затем, когда он получает ответ, если было установлено значение withCredentials, он только доставит / предоставит результат вызывающему javascript, если ответ имеет доступ -Control-Allow-Credentials set header. Если заголовок отсутствует, он не раскрывает ответ, эффективно скрывая его.