У меня проблема с тем, как Safari обрабатывает запросы CORS. Рассмотрим следующий сценарий:Safari не выполняет запрос CORS после перенаправления 302
- DomainA принимает страницу, которая делает запрос XHR к DomainB (заголовок происхождения устанавливается в DomainA)
- DomainB возвращает 302 редирект сделать DomainC (заголовок происхождения устанавливается в нуль, который, кажется, OK с RFC)
- DomainC возвращают ответ 200 с фактическим содержанием
Это работает в Chrome, FF, но он не на сафари (проверено на Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600,8 .9 (KHTML, как и Gecko) Версия/8.0.8 Safari/600.8.9).
Когда я делаю запрос без включения xhr.withCredentials, во-первых, Safari делает запрос предварительной проверки OPTIONS до фактического запроса DomainC, который IMHO не является обязательным, поскольку все запросы являются простыми, но я могу обрабатывать. Проблема заключается в сбое Safari после предполетного запроса DomainC, говорящего «Невозможно сделать запрос с нулевым». Я могу обойти это, установив Access-Control-Allow-Origin в * и отменив заголовок Access-Control-Allow-Credentials (они являются взаимоисключающими), что сделало бы этот сценарий работать. Однако я все еще думаю, что это неправильное поведение.
Теперь мне нужны учетные данные, которые нужно передать (и нет, я не могу передать его каким-либо другим способом, поскольку это зависит от некоторых сторонних серверов). Итак, давайте установим
xhr.withCredentials
истина, и мы вернулись к «Не может сделать любой запрос от нуля», а теперь даже подстановочные знаки Access-Control-Allow-Credentials не помогает.
Я думаю, что все заголовки CORS установлены правильно, но, пожалуйста, не стесняйтесь меня проверять. Пример испытания можно найти здесь: http://a.ihatesafari.com
Что здесь происходит? Это ошибка, или я чего-то не хватает?
Спасибо за ответы
Он даже терпит неудачу в более простом случае DomainA, создающем XHR для DomainA и перенаправляясь на DomainC. – hrdwdmrbl