Переадресация вызова jQuery ajax с учетными данными - программирование
Подтвердить что ты не робот

Переадресация вызова 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
4b9b3361

Ответ 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/

надеюсь, что эта помощь..