如何在Firefox上启用CORS

45

如何在Firefox上允许CORS

我在Chrome和Internet Explorer上很容易做到了,但是在Firefox上完全失败了。我编辑了以下的about:config条目。

security.fileuri.strict_origin_policy = false

这个问题已在这里发布了多次,并且也在其他网站上讨论过,但都没有效果。我阅读了Mozilla的同源策略指南:

跨源资源共享(CORS)

但它只是解释了CORS和相关主题。尚未列出在Firefox上启用CORS的解决方法。

有没有明确的解决方案?

PS:FORCECORS也无法正常工作...


在处理CORS时,没有简单的答案。这个网站提供了关于服务器和客户端方面的所有信息:http://enable-cors.org/ - percebus
5个回答

30

不需要对浏览器进行任何操作。所有现代浏览器(包括 Firefox 3.5 及以上版本)默认支持 CORS

JavaScript 访问的服务器必须通过 CORS HTTP 响应头授权给运行 JS 的 HTML 页面所在的站点。


security.fileuri.strict_origin_policy 用于使本地 HTML 文档中的 JavaScript 可以访问整个硬盘。不要将其设置为 false,否则会使你容易受到下载 HTML 文档(包括邮件附件)攻击。


谢谢,我现在正在尝试这种方法,但我仍然无法访问我的Tomcat上的Web服务。我尝试了以下链接中引用的高级示例:http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter/Initialisation_parameters 你能告诉我还需要处理什么吗? - Ahab
6
由于您未提供任何用于访问 Web 服务器的代码,也未引用您在 JavaScript 控制台中收到的错误消息,也未引用 JavaScript 正在进行和接收的 HTTP 请求和响应(这些内容可在浏览器开发工具的“网络”选项卡中查看),因此无法回答。 - Quentin
1
请求被中止,因此根本没有响应头。问题仅出现在火狐浏览器中,而不是谷歌浏览器。 - Ahamed

10

只有在服务器发送以下标头时才可能发生:Access-Control-Allow-Origin: *

如果这是您的代码,则可以像这样设置(PHP):

header('Access-Control-Allow-Origin: *');

谢谢,CORS问题已经影响了我的测试很长时间。 - kiwicomb123
4
仅作警告,随处添加“Access-Control-Allow-Origin: ”将允许任何人使用CORS。无论情况如何,您都应该采取安全措施,如果API仅由特定资源使用,则应通过逗号分隔的列表限制允许的域名,而不是提供“”。 - Jay Edwards
1
这是不安全的。除非你确定这就是你想要的,否则不要这样做。 - span
我已经使用简单的Python服务器完成了这个,但我的浏览器仍然阻止它。 - HyperChromatica

4

2
我曾经陷入这个问题中很长时间(CORS在火狐浏览器上不起作用,但在Chrome和其他浏览器上可以),任何建议都没有帮助。最终,我发现我的本地开发子域名(如sub.example.dev)没有明确列在/etc/hosts文件中,因此火狐浏览器无法找到它并显示了令人困惑的错误信息'Aborted...'在开发工具面板中。
将确切的子域名放入我的本地/etc/hosts中解决了这个问题。/etc/hosts只是Unix系统中的一个纯文本文件,因此您可以在root用户下打开它,并将您的子域名放在'127.0.0.1' IP地址的前面。

2
可能描述如何将子域名放入/etc/hosts会很有帮助。此致敬礼 - YakovL

0
很多时候您无法设置发送服务器,因此我在我的JavaScript代码中更改了XMLHttpRequest.open调用为本地的get-file.php文件,在其中放置了以下代码:
<?php
  $file = file($_GET['url']);
  echo implode('', $file);
?>

这段 JavaScript 代码正在执行以下操作:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    // File content is now in the this.responseText
  }
};
xhttp.open("GET", "get-file.php?url=http://site/file", true);
xhttp.send();

在我的情况下,这完美地解决了限制/情况,无需攻击Firefox或服务器。只需将您的JavaScript / HTML文件与该小型PHP文件一起加载到服务器上即可完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接