2016-05-03 4 views
2

При запросе одного и того же удаленного ресурса со страниц на разных хостах запросы удаются по первому запросу и последующим запросам со страниц на одном и том же хосте, но сбой на страницах другого хоста , Я видел это поведение как в firefox, так и в хроме, но, как ни странно, не всегда.Запрос CORS не работает только при запросе одного и того же ресурса из другого домена

Чтобы попробовать это проверить, доступ к этим страницам в любом порядке:

После нажатия «данных запроса» кнопки на первой странице вы увидите диалог с содержимым удаленного ресурса, если вы попытаетесь сделать то же самое на другом хосте, вы можете увидеть следующее на консоли браузера:

Запрос на перекрестный запрос заблокирован: политика одного и того же происхождения запрещает чтение удаленного ресурса на https://www.w3.org/People/Berners-Lee/card.rdf. (Причина: заголовок CORS 'Access-Control-Allow-Origin' не соответствует 'http://test.lodide.io').

Похоже, что браузер кэширует некоторый вывод Access-Control-Allow-Origin-Header, а затем жалуется, что новый хост не совпадает. Обратите внимание, что сервер фактически возвращает «*» в качестве значения заголовка.

Есть ли способ обойти эту проблему путем программного отключения кэширования при выдаче XMLHttpRequest?

+0

Вы можете использовать IE для перекрестного домена. ИЛИ, если вы можете изменить код на стороне сервера, вы можете это сделать. –

+0

@ Altmish-E-Azam, я не думаю, что вы поняли проблему. Сервер отправляет правильные заголовки CORS, в противном случае дайте мне знать, что, по вашему мнению, нужно изменить на сервере. –

ответ

3

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что w3.org не использует заголовок Vary, несмотря на изменение значения Access-Control-Allow-Origin по запросу. См. https://fetch.spec.whatwg.org/#cors-protocol-and-http-caches.

+0

Согласовано. Ответ должен использовать «Vary: Origin» как минимум –

+0

Я не заметил, что w3c отправляет обратно «*» в качестве значения заголовка, когда в запросе нет заголовка источника. Ответ: эфир просто возвращает «*» или содержит переменный заголовок, но я не вижу причин для зеркалирования заголовка Origin в заголовке Allow-Origin. –

Смежные вопросы