尽管有标题,但Firefox的"跨源请求已被阻止"

God*_*ker 100 javascript firefox cross-domain cors

我正在尝试制作一个简单的跨源请求,并且Firefox始终使用此错误阻止它:

跨源请求已阻止:同源策略禁止在[url]读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决.[URL]

它在Chrome和Safari中运行良好.

据我所知,我已经在我的PHP上设置了所有正确的标题以允许它工作.这是我的服务器响应的内容

HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

我尝试过使用Angular,jQuery和一个基本的XMLHTTPRequest对象,如下所示:

var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()
Run Code Online (Sandbox Code Playgroud)

...它适用于除Firefox之外的所有浏览器.有人能帮忙吗?

God*_*ker 107

事实证明这与CORS无关 - 这是安全证书的问题.误导性错误= 4小时的头痛.

  • 在我的情况下,我有一个角度应用程序调用另一台服务器,两者都使用内部签名证书.但是,Firefox不会自动信任该证书,因为它不被公共机构识别.因此,在此问题消失之前,我需要确保将两个服务器的证书添加为Firefox中的例外情况. (9认同)
  • Godwhacker,也许是我也遇到了同样的问题.你怎么知道它是安全证书?你在哪里可以看到这个? (4认同)
  • 对我来说,修复是在XHR实例上设置`withCredentials = true`; 否则Firefox在发出请求时无法使用客户端证书(但在Chrome中运行正常). (3认同)
  • 只是有这个确切的问题,错误是太通用的,除此之外,Chrome和Firefox使用不同的证书存储,因此更难调试.我应该怀疑当我的代理没有捕获任何OPTIONS请求时(它在SSL握手中断了). (2认同)

Hyp*_*ate 25

如果您没有“真实”证书(因此使用自签名证书),则在 Firefox 中您可以访问:

Options > Privacy & Security > (scroll to the bottom) View Certificates > Servers > Add Exception...
Run Code Online (Sandbox Code Playgroud)

在那里,填写位置,例如: https://www.myserver:myport

  • 当我的 CORS 在除 Firefox 之外的所有其他浏览器中工作时,这对我有用,并出现错误 -> 跨源请求被阻止:同源策略不允许读取 https://localhost:44304/v1/search 处的远程资源。(原因:CORS请求未成功)。 (2认同)

Cra*_*dks 20

我发现我的问题是我发送了交叉请求的服务器有一个不受信任的证书.

如果要连接到跨域https,则必须首先为此证书添加例外.

您可以通过访问阻止的链接一次并添加异常来执行此操作.

  • 这并没有特别帮助任何访问您网站的人,除非您很高兴在那里发消息说"如果您使用的是Firefox,请访问此网站并将其添加到您的例外列表中" (4认同)
  • 您浏览到 Firefox 直接抱怨的链接。然后您会收到证书警告。允许证书。再次访问您的主站点。 (3认同)

小智 11

我在2天后找到了解决方案:(.

重要说明:在响应凭证请求时,服务器必须指定域,并且不能使用通配符.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials


Pro*_*ing 10

我遇到了这个问题,发现该消息阻止了Firefox中的请求:

原因:CORS请求未成功

拔掉头发后,我发现新安装的Firefox扩展程序Privacy Badger阻止了请求。

如果您挠头后遇到此问题,请尝试检查已安装的扩展,以查看其中是否有阻止请求的扩展。

请参阅原因:有关MDN的CORS请求未成功


Leo*_*Leo 5

只是一句警告。我终于解决了 Firefox 和 CORS 的问题。

我的解决方案是这篇文章

使用正确的响应头在 Apache 上设置 CORS(跨源资源共享),允许一切通过 | 本杰明·霍恩

然而,在 Apache 服务器上(在文件夹 .htaccess 中)设置这些标头后,Firefox 的行为真的非常奇怪。

我添加了很多console.log("Hi FF, you are here A")等来看看发生了什么。

起初它看起来像是挂了xhr.send()。但后来我发现它并没有得到这个声明。我console.log在它前面放了另一个,但没有到达那里——即使上一个console.log和新的之间没有任何东西。它只是停在了两人之间console.log

重新排序行,删除,看看文件中是否有任何奇怪的字符。我什么也没发现。

重新启动 Firefox 解决了这个问题。

是的,我应该提交一个错误。只是它太奇怪了,所以不知道如何重现它。

注意:而且,哦,我只是做了Header always set零件,而不是Rewrite*零件!