尽管有标题,Firefox“跨源请求已被阻止”

IT技术 javascript firefox cors cross-domain
2021-01-29 18:23:58

我正在尝试发出一个简单的跨域请求,而 Firefox 始终使用此错误阻止它:

跨域请求被阻止:同源策略不允许读取 [url] 处的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。[网址]

它在 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

我尝试过使用 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()

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

6个回答

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

@SamStorie 的评论听起来比这个答案更像是答案。谢谢
2021-03-18 18:23:58
刚刚遇到了这个确切的问题,该错误过于笼统,而且 Chrome 和 Firefox 使用不同的证书存储,因此更难调试。我应该怀疑当我的代理没有捕获任何 OPTIONS 请求时(它在 SSL 握手时中断)。
2021-03-26 18:23:58
Godwhacker,也许我遇到了同样的问题。你是怎么知道是安全证书的?你在哪里可以看到这个?
2021-04-08 18:23:58
就我而言,我有一个角度应用程序调用另一台服务器,两者都使用内部签名证书。但是,Firefox 不会自动信任该证书,因为它未被公共机构认可。所以我需要确保在这个问题消失之前,两台服务器的证书都被添加为 Firefox 中的例外。
2021-04-08 18:23:58
对我来说,修复是withCredentials=true在 XHR 实例上设置否则 Firefox 在发出请求时无法使用客户端证书(但是在 Chrome 中运行良好)。
2021-04-08 18:23:58

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

原因:CORS 请求没有成功

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

如果您在挠头之后遇到这个问题,请尝试检查您安装了哪些扩展,看看是否有任何扩展正在阻止请求。

有关详细信息,请参阅原因:在 MDN 上的CORS 请求未成功

我点击了每个扩展程序,看看是否有任何提到我遇到问题的特定站点的阻止内容。Ghostery 有一个条目,所以我将该站点标记为受信任,重新加载页面,请求成功。
2021-03-14 18:23:58
您是如何确定哪个扩展程序阻止了请求?我遇到了同样的问题,因为请求在具有新配置文件的 Firefox 中成功(因此没有扩展)
2021-03-24 18:23:58
谢谢!我还发现了扩展 Project Insight,它概述了所有扩展的权限。addons.mozilla.org/en-US/firefox/addon/project-insight
2021-03-30 18:23:58
@awendt Oof。对我来说也有隐私獾。谢谢。
2021-04-07 18:23:58

我发现我的问题是我发送交叉请求的服务器拥有不受信任的证书。

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

您可以通过访问一次被阻止的链接并添加异常来完成此操作。

您浏览了 Firefox 直接抱怨的链接。然后您会收到证书警告。允许证书。再次访问您的主站点。
2021-03-24 18:23:58
这对访问您网站的任何人都没有特别的帮助,除非您很高兴在那里发布一条消息,说“如果您使用的是 Firefox,请访问该网站并将其添加到您的例外列表中”
2021-04-04 18:23:58
@Cracker0dks“访问一次被阻止的链接并添加例外”你能详细说明在哪里添加例外吗?我正在使用 Firefox Quantum。TIA
2021-04-12 18:23:58

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

Options > Privacy & Security > (scroll to the bottom) View Certificates > Servers > Add Exception...

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

@Hypenate:感谢您的解决方案。它解决了 Firefox 问题。但它不适用于任何移动浏览器。你能帮我解决这个问题吗?
2021-03-31 18:23:58
当我的 CORS 在除 Firefox 之外的所有其他浏览器中工作时,这对我有用,但出现错误 -> Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at localhost:44304/v1/search(原因:CORS 请求没有成功)。
2021-04-02 18:23:58

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

重要提示:响应凭据请求时,服务器必须指定域,不能使用通配符。

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