跨域jQuery ajax调用凭证

我按照以下步骤操作:

  1. 让服务器允许跨域调用(包含所有标头和东西) 这是有效的
  2. 使用一些跨域调用测试服务器这是有效的
  3. 获取服务器强制证书这有效
  4. 使用浏览器转到服务器上的文件,选择正确的证书并查看文件仍然有效
    现在我们得到了很好的部分
  5. 将跨域调用与证书相结合< – 这不起作用

问题

我从浏览器获取证书请求,但是当我选择与使用浏览器时相同的证书时,会进行呼叫,但我得到403 Forbidden。

$.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: trueAccess-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 

我最好的猜测是,这是一个问题,不是你的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为*,浏览器也不允许对凭证请求进行响应,根据以下文档: https : //developer.mozilla.org/en -US / docs / HTTP / Access_control_CORS?redirectlocale = en-US&redirectslug = HTTP_access_control #Requests_with_credentials 。

编辑:由于OP正确设置了CORS标头,问题似乎是服务器拒绝具有403状态代码的OPTIONS请求。 OPTIONS请求(称为“预检请求”)在某些跨域请求(例如具有application / xml内容类型的POST)之前发送,以允许服务器通知浏览器允许哪些类型的请求。 由于浏览器没有从OPTIONS请求中看到它所期望的200响应,因此它不会触发实际的POST请求。

基本上我们只需写在htaccess上

 Header set Access-Control-Allow-Origin “*” 

但是当我们需要cookie等时,我们必须在你的ajax代码和htaccess上添加脚本

我在我的博客上写了关于跨域XHR的文章, http://blog.imammubin.com/cross-domain-xhr/2014/05/28/

希望这有帮助..