Javascript 具有凭据的跨域jQuery ajax调用
我遵循了以下步骤:Javascript 具有凭据的跨域jQuery ajax调用,javascript,jquery,certificate,cross-domain,Javascript,Jquery,Certificate,Cross Domain,我遵循了以下步骤: 让服务器允许跨域调用(包含所有的头和内容),这是可行的 使用一些跨域调用来测试服务器这是可行的 让服务器强制证书生效 使用浏览器转到服务器上的文件,选择正确的证书,然后查看该文件是否仍然有效 现在我们进入精彩部分 将跨域调用与证书结合起来,我最好的猜测是这不是Javascript的问题,而是CORS配置的问题。您是否使用访问控制允许凭据:true标题设置服务器 另请注意,根据以下文档,即使设置了allow credentials标头,如果Access Control allo
现在我们进入精彩部分
访问控制允许凭据:true
标题设置服务器
另请注意,根据以下文档,即使设置了allow credentials标头,如果Access Control allow Origin
为*,浏览器也不允许响应已认证的请求:
编辑:由于OP正确设置了CORS头,问题似乎是服务器拒绝了带有403状态代码的选项请求。选项请求(称为“飞行前请求”)在某些跨域请求(例如具有应用程序/xml内容类型的帖子)之前发送,以允许服务器通知浏览器允许哪些类型的请求。由于浏览器没有看到它期望从选项请求中得到的200响应,因此它不会触发实际的POST请求。基本上,我们只需在htaccess上写入即可
Header set Access-Control-Allow-Origin “*”
但当我们需要cookie等时,我们必须在ajax代码和htaccess上添加脚本
我在我的博客blog.imammubin.com/cross-domain-XHR/2014/05/28/(编辑:网站不再存在)上写了关于跨域XHR的文章
希望这有帮助。我编辑了我的问题,这些标题是正确的。还有其他想法吗?嗯。你能把你在请求和响应上看到的实际标题贴出来吗?(您可以在Chrome开发工具中看到这些)您应该看到一个选项请求,其响应包含
访问控制允许来源:http://yourdomain.com
,访问控制允许方法:POST、选项和访问控制允许凭据:true
。当您更改内容类型时,它会变成一个简单的(非预装)请求,因此服务器可能无法正确响应选项请求?我在问题中添加了请求和响应标题,目前正在查看选项请求,感谢您为我指明了这个方向。我发现选项请求问题的奇怪之处在于,我得到了一个403禁止而不是405不允许的方法(如果您不能执行选项请求,您可能会想到这一点)未来读者注意:OP没有指定使用哪种服务器后端,但是一些消息来源说Tomcat有一个默认的选项处理程序,如果您不手动重写它,它将返回403。注意!
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
Header set Access-Control-Allow-Origin “*”