设置如下:
Access-Control-Allow-Origin
标头和需要客户端验证进行响应。问题在于Firefox突然中止了请求(好吧,这就是它在firebug中的说法)。使用openssl s_server
运行安装程序会提示Firefox实际上甚至不发送客户端证书:
140727260153512:error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer
did not return a certificate:s3_srvr.c:2965:ACCEPT
同样精确的设置与Chrome完美配合,这可能是Firefox中的一个错误。 然而,使用注入DOM的<script>
元素执行ajax调用似乎按预期工作...
那么,有没有其他人遇到这个?这是一个错误吗?任何解决方法?有什么明显缺失的东西吗?
答案 0 :(得分:4)
5年后的Chiming可能对OP没什么帮助,但是如果其他人在将来遇到这个问题......
默认情况下,Firefox似乎不发送带有跨源XHR请求的客户端证书。在XHR实例上设置withCredentials=true
解决了我的问题。请注意,我也没有看到Chrome的这个问题 - 只有Firefox。
有关详细信息,请参阅this Mozilla Dev Network blog post。特别是,以下声明:
默认情况下,在跨站点XMLHttpRequest调用中,浏览器会 不发送凭据。调用XMLHttpRequest对象时,必须在其上设置一个特定的标志。
答案 1 :(得分:2)
注入脚本的原因与简单的XHR请求相反是因为Single Origin Policy。这可能解释了为什么Chrome允许XHR而不是FF; Chrome认为子域名属于同一来源,但FF不会。
允许从其他域注入脚本(这是Google Analytics所做的)以及处理这种情况的其中一种做法。
我的团队处理这种情况的方式是通过服务器端代理发出请求。
如果可以,我建议使用服务器端代理,但只要代码来自可靠来源,脚本注入方法就可以正常工作。
我还发现this article描述了你的情况。