我按照以下步骤操作:
- 让服务器允许跨域调用(带有所有标题和其他内容)这个可以工作
- 使用一些跨域调用测试服务器这个可以工作
- 强制服务器使用证书这个可以工作
- 使用浏览器访问服务器上的文件,选择正确的证书并查看文件仍然可以工作
现在进入好的部分 - 将跨域调用与证书组合<-- 这个不起作用
问题
我从浏览器获取了证书请求,但当我选择与浏览器相同的证书时,调用已经被执行,但我收到了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
Access-Control-Allow-Origin: http://yourdomain.com
、Access-Control-Allow-Methods: POST, OPTIONS
和Access-Control-Allow-Credentials: true
。当你改变内容类型时,它变成了一个简单的(非预检)请求,所以服务器可能没有正确地响应OPTIONS请求? - Emily