我正在使用jQuery创建跨域ajax请求。这个请求在Chrome,甚至是IE中运行良好。但在Firefox中,预检OPTIONS总是被Firefox中止。此请求的目标服务器是Apache,并在httpd-vhosts.conf
中启用了CORS令人沮丧的是,Firefox发出的第一个请求失败了。随后使用F5刷新 - ajax调用有时完成。在Firebug中 - 我没有看到预检OPTIONS请求。我花了很长时间试图解决这个问题 - 任何帮助都非常感激。
<VirtualHost *:8443>
ServerName cyrsggisprd01.sgaas.gi-mss.com
SSLVerifyClient none
WSGIScriptAlias /svm_server D:\Apache24\htdocs\svm_server\adapter.wsgi
<Directory D:\Apache24\htdocs\svm_server>
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token, session"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* / [R=200,L]
Require all granted
</Directory>
SSLEngine On
SSLCertificateFile D:\Apache24\ssl\server.crt
SSLCertificateKeyFile D:\Apache24\ssl\server.key
</VirtualHost>
答案 0 :(得分:3)
我意识到这是一个老问题,但我有一个非常类似的问题,不同的设置涉及IIS而不是Apache,但我设法弄清楚了。核心问题是CORS,SSL和不受信任的证书。
就我而言,CORS客户端(由其自己的URL提供的SPA)和服务器具有不受信任的证书,但在Firefox中为客户端设置了例外,但没有为服务器设置。这意味着Firefox成功加载了SPA,但是在飞行前阶段,SPA对服务器的任何CORS请求都被中止,没有进一步的解释。我相信(但我还没有确认)Edge会出现类似的错误:“网络错误0x80070005,访问被拒绝”。
因此,基本上,仔细检查以查看您的服务器是否具有有效证书,并将所需的任何例外添加到浏览器中。我在Firefox中所做的只是手动访问服务器URL并添加异常,这使得问题消失了。这个简单的步骤非常容易被忽视(特别是在设置新的开发环境时),调试非常令人沮丧,因为生成的错误消息具有误导性。