Переадресация вызова jQuery ajax с учетными данными
Я выполнил следующие шаги:
- Получить сервер для разрешения перекрестных доменных вызовов (со всеми заголовками и т.д.). Это работает
- Проверьте сервер с некоторыми перекрестными вызовами. Это работает
- Получить сервер для принудительного получения сертификата. Это работает
- Перейти к файлу на сервере с браузером, выбрать нужный сертификат и посмотреть файл Все еще работает
Теперь мы попадаем в приятную часть
- Объединить вызовы перекрестных доменов с сертификатом < - это не работает
Проблема
Я получаю запрос сертификата из браузера, но когда я выбираю тот же сертификат, что и при использовании браузера, вызов выполняется, но я получаю запрещенный 403.
Код
$.ajax({
type: "POST",
xhrFields: {withCredentials: true},
dataType: "xml",
contentType: "text/xml; charset=\"utf-8\"",
url: "https://www.myOtherServer.com/testfile.asp",
});
Любые идеи?
Изменить
Параметры Access-Control-Allow-Credentials: true
и Access-Control-Allow-Origin
настроены правильно.
Дополнительная информация
Я начинаю думать, что это как-то связано с типом контента. Когда я меняю его на "text/html"
, я получаю ошибку 415
, но мне действительно нужно отправить xml, потому что это SOAP-сервер.
Заголовки ответов
Access-Control-Allow-Cred... true
Access-Control-Allow-Head... Content-Type, Origin, Man, Messagetype, Soapaction, X-Test-Header
Access-Control-Allow-Meth... GET,POST,HEAD,DELETE,PUT,OPTIONS
Access-Control-Allow-Orig... https://www.mywebsite.com
Access-Control-Max-Age 1800
Cache-Control private
Content-Length 5561
Content-Type text/html; charset=utf-8
Date Wed, 19 Dec 2012 15:06:46 GMT
Server Microsoft-IIS/7.5
X-Powered-By ASP.NET
Заголовки запросов
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language nl,en-us;q=0.7,en;q=0.3
Access-Control-Request-He... content-type
Access-Control-Request-Me... POST
Cache-Control no-cache
Connection keep-alive
Host myhoast.com
Origin https://www.mywebsite.com
Pragma no-cache
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Ответы
Ответ 1
Лучше всего предположить, что это проблема не с вашим Javascript, а с вашей конфигурацией CORS. Вы настроили сервер с заголовком Access-Control-Allow-Credentials: true
? http://www.w3.org/TR/cors/#access-control-allow-credentials-response-header
Также обратите внимание, что даже если заголовок allow-credentials установлен, браузер не будет отвечать на запросы, если Access-Control-Allow-Origin
is *, в соответствии с этими документами: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Requests_with_credentials.
Изменить. Поскольку OP правильно настроил заголовки CORS, проблема заключается в том, что сервер отклоняет запросы OPTIONS с кодом статуса 403. Запросы OPTIONS (называемые "предпродажным запросом" ) отправляются перед некоторыми междоменными запросами (такими как POST с типами содержимого приложения /xml ), чтобы сервер мог уведомить обозреватель о том, какие типы запросов разрешены. Поскольку браузер не видит ответ 200, который он ожидает от запроса OPTIONS, он не запускает фактический запрос POST.
Ответ 2
мы просто должны писать на htaccess
Header set Access-Control-Allow-Origin "*"
но когда нам нужны файлы cookie и т.д., мы должны добавить script в ваш код ajax и htaccess
Я пишу о перекрестном домене XHR в своем блоге, http://blog.imammubin.com/cross-domain-xhr/2014/05/28/
надеюсь, что эта помощь..