- Как сервер узнает и как я могу узнать на стороне клиента, включены ли учетные данные для включения?
Принимающий сервер ничего не знает о настройке withCredentials
на стороне клиента. Сервер просто получает какую-либо форму учетных данных в запросе или нет. Что касается протокола CORS, то принимающий сервер не меняет своего поведения в зависимости от того, содержит ли запрос учетные данные или нет. Принимающий сервер либо просто отправляет обратно Access-Control-Allow-Credentials: true
заголовок ответа, либо не отправляет.
- Если я не устанавливаю учетные данные на моей стороне, что может заставить Chrome думать, что я использую режим
withCredentials = 'include'
?
Ответ на этот вопрос субъективен - это зависит от того, для кого администратор сервера намеревается получить ответ. Но лучшая практика заключается в том, что вы, вероятно, хотите отправить обратно Access-Control-Allow-Credentials: true
только к определенному источнику, который вы знаете и явно хотите разрешить. Вот почему протокол CORS имеет ограничение: он не разрешает вашему веб-интерфейсу обращаться к ответу, если запрос имеет учетные данные, а ответ имеет значение заголовка Access-Control-Allow-Origin: *
(подстановочный знак).
- Должен ли сервер отправлять обратно заголовок
Access-Control-Allow-Credentials: true
на ВСЕХ запросах после ОПЦИЙ?
Chrome будет думать, что если на самом деле режим равен withCredentials = 'include'
. Так что либо какая-то часть вашего клиентского кода является на самом деле установкой withCredentials = 'include'
- или иначе, withCredentials = 'include'
не на самом деле получает все, но вы по какой-то причине просто думаете, что это так.