Как сервер узнает, что запрос отправлен с учетными данными? - PullRequest
0 голосов
/ 11 ноября 2018

У меня возникла проблема, которая только что возникла при запросе ресурса с другого сервера через мой веб-сайт.

Я запрашиваю ресурс (файл PDF запрашивается через Range Requests). Браузер (в данном случае Chrome) отправляет запрос OPTIONS на сервер. Сервер возвращает 200 из ОПЦИЙ, но один из заголовков - Access-Control-Allow-Credentials: true Поскольку сервер предоставляет подстановочный знак * для заголовка ответа Access-Control-Allow-Origin, Chrome затем (я думаю) выбрасывает следующие ответы от сервера и выдает ошибку, в которой говорится, что сервер не может предоставить подстановочный знак, если запрос сделано withCredentials = 'include'.

Теперь я не устанавливаю флаг withCredentials в моем коде, который я вижу, и Я не могу выяснить, как сервер узнает, отправляется ли запрос с помощью Credentials . Мои куки-файлы не отправляются с ВАРИАНТАМИ или после запросов ПОЛУЧИТЬ / ЧАСТИЧНО КОНТЕНТ. В запросе нет других специальных заголовков, которые я могу видеть.

Итак,

  1. Как сервер узнает и как я могу узнать на стороне клиента, включены ли учетные данные для включения?

  2. Если я не устанавливаю учетные данные на своей стороне, что может заставить Chrome думать, что я использую режим withCredentials = 'include'?

  3. Должен ли сервер отправлять обратно заголовок Access-Control-Allow-Credentials: true на ВСЕХ запросах после ОПЦИЙ?

1 Ответ

0 голосов
/ 11 ноября 2018
  1. Как сервер узнает и как я могу узнать на стороне клиента, включены ли учетные данные для включения?

Принимающий сервер ничего не знает о настройке withCredentials на стороне клиента. Сервер просто получает какую-либо форму учетных данных в запросе или нет. Что касается протокола CORS, то принимающий сервер не меняет своего поведения в зависимости от того, содержит ли запрос учетные данные или нет. Принимающий сервер либо просто отправляет обратно Access-Control-Allow-Credentials: true заголовок ответа, либо не отправляет.

  1. Если я не устанавливаю учетные данные на моей стороне, что может заставить Chrome думать, что я использую режим withCredentials = 'include'?

Ответ на этот вопрос субъективен - это зависит от того, для кого администратор сервера намеревается получить ответ. Но лучшая практика заключается в том, что вы, вероятно, хотите отправить обратно Access-Control-Allow-Credentials: true только к определенному источнику, который вы знаете и явно хотите разрешить. Вот почему протокол CORS имеет ограничение: он не разрешает вашему веб-интерфейсу обращаться к ответу, если запрос имеет учетные данные, а ответ имеет значение заголовка Access-Control-Allow-Origin: * (подстановочный знак).

  1. Должен ли сервер отправлять обратно заголовок Access-Control-Allow-Credentials: true на ВСЕХ запросах после ОПЦИЙ?

Chrome будет думать, что если на самом деле режим равен withCredentials = 'include'. Так что либо какая-то часть вашего клиентского кода является на самом деле установкой withCredentials = 'include' - или иначе, withCredentials = 'include' не на самом деле получает все, но вы по какой-то причине просто думаете, что это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...