Firefox 设置启用跨域 Ajax 请求

Posted

技术标签:

【中文标题】Firefox 设置启用跨域 Ajax 请求【英文标题】:Firefox setting to enable cross domain Ajax request 【发布时间】:2010-10-14 15:05:55 【问题描述】:

我需要暂时允许跨域 XMLHttpRequest。更改 Firefox 安全设置似乎是要走的路。但是我尝试过this 和this,但它们没有用。以前有没有人能够配置这个?谢谢。

【问题讨论】:

如果您可以要求更改 Firefox 安全设置,您不能使用 GreaseMonkey 脚本吗? 在 Chrome 上试用:***.com/questions/3102819/… 在这里试用我的 Firefox 插件以启用 ajax 跨域:addons.mozilla.org/en-US/firefox/addon/cross-domain-cors 【参考方案1】:

如果您只是不想在应用开发和测试期间将时间浪费在跨域问题上,您可以使用插件 Force CORS 进行 FF。

更新:这个插件似乎不再存在。但是还有另一种选择 - 这个Chrome extension

【讨论】:

Forcecors 很棒。值得一提的是,安装后您必须单击查看 => 工具栏 => 附加栏。然后 cors 按钮将显示在右下角单击以启用它。我解压了 xpi,看到按下按钮时有一个切换功能,但从来没有看到按钮。 "值得一提的是,安装后您必须点击查看 => 工具栏 => 附加栏。"先生,您是圣人 看来FF已经把它删掉了。【参考方案2】:

对于现代浏览器,您可以尝试以下方法:

https://developer.mozilla.org/en/HTTP_access_control

简而言之,您需要在SERVER响应头中添加以下内容(以下内容允许从foo.example访问):

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER
Access-Control-Max-Age: 1728000

请注意,X-PINGOTHER 是由 javascript 插入的自定义标头,并且应该因站点而异。

如果您希望任何站点在 Ajax 中访问您的服务器,请改用 *


编辑:

当我第一次回答 2009 的问题时,我实际上遇到了同样的问题,我使用服务器端配置解决了这个问题。

那时 FF 或 Chrome 上还没有插件。

不过,现在我们确实有使用浏览器端插件的替代方案,请查看tsds的答案

【讨论】:

如果我理解正确,如果不能更换服务器,这并不能解决原来的问题 请注意,如果您还想使用 XHR 的 withCredentials 选项来发送 cookie 标头,Access-Control-Allow-Origin: * 将不起作用。在这种情况下,您确实需要指定一个特定的域。 -1 它没有回答问题。 OP 要求浏览器端配置【参考方案3】:

您是否尝试过使用 jQuery 的 ajax 请求?从 1.3 版开始,jQuery 支持某些类型的跨域 ajax 请求。

引用上面的参考资料:

注意:所有遥控器(不在同一个 域)请求应指定 当 'script' 或 'jsonp' 是 GET 时 dataType(因为它加载脚本 使用 DOM 脚本标签)。阿贾克斯选项 需要 XMLHttpRequest 对象 不适用于这些请求。 完整和成功的功能是 在完成时调用,但不要 接收一个 XHR 对象;之前发送 和 dataFilter 函数不是 调用。

从 jQuery 1.2 开始,您可以加载 JSON 位于另一个域的数据,如果您 指定一个 JSONP 回调,可以是 这样做:“myurl?callback=?”。 jQuery 自动替换 ? 使用正确的方法名称调用, 调用您指定的回调。要么, 如果您将 dataType 设置为“jsonp” 回调将自动添加 到您的 Ajax 请求。

【讨论】:

我们正在使用它来检索 json 数据,但这是合并到页面中的 html,它只是暂时的,因此更改 firefox 配置应该是最简单的事情 为什么投反对票?使用框架的跨域能力是对这个问题的合理回答。问题中没有提到需要 HTML 的事实,只是在我的回复的评论中。【参考方案4】:

事情是这样的,没有办法“暂时”禁用跨域 XMLHttpRequest,如果你可以暂时禁用它,那么它可以永久禁用。这是现代 AJAX 编程中一个相当普遍的问题,通常使用称为跨域脚本的技术来解决。

这里的想法是,如果您调用跨域脚本,它会返回 JavaScript (JSON) 结果,然后将这些结果传递给您端的函数。

以下是一些示例代码,用于说明从 JavaScript 代码角度看它的外观:

  function request_some_data() 
    var s = "http://my.document.url.com/my_data?p1=v1&p2=v2&callback=myfunc";

      try 
        try
          document.write("<scr"+"ipt type='text/javascript' src='"+s+"'></scr"+"ipt>");
         
        catch(e)
          var x = document.createElement("script");
          x.src = s;
          document.getElementsByTagName("head")[0].appendChild(x);
        
      
      catch (e) 
        alert(e.message);
      
   

然后,您将在代码中定义一个接收数据的函数,并在服务器中“处理”回调案例,这里是客户端 JavaScript:

function myfunc(data) 
  alert(data);

在服务器端,我在这里给出一个 php 示例,但这可以在 Java 或任何您的服务器端技术中轻松完成:

<?php
   if($_GET["callback"]) 
     print($_GET["callback"] . "(");
   
   /* place your JSON object code/logic here */
   if($_GET["callback"]) 
     print(");");
   
 ?>

请注意,您在服务器端生成的内容最终是一些在客户端执行的 JavaScript。

【讨论】:

"&lt;scr"+"ipt" 这看起来很恶意 当然你可以暂时禁用它。例如,使用 --disable-web-security 启动 Chrome。 @JosephLust 请注意,在 Chrom 广泛使用之前,有人问过这个问题/回答了这个问题。【参考方案5】:

我也尝试过使用“UniversalBrowswerRead”的东西,但它没有用。您也许可以添加一个“允许”标题,但我还没有真正尝试过这样做。很新。

您可以找到更多信息here

【讨论】:

【参考方案6】:

我正面临来自file:// 的这个问题。我想从本地 HTML 文件(测试平台)向两台服务器发送查询。

这种特殊情况不应有任何安全问题,但只有 Safari 允许这样做。

这是我发现的问题的best discussion。

【讨论】:

谢谢!我想我不会再在 Chrome 中测试了。【参考方案7】:

使用 mod_proxy 之类的东西怎么样?然后它会在您的浏览器中看到请求会发送到同一台服务器,但实际上它们是被转发到另一台服务器的。

【讨论】:

【参考方案8】:

我使用 Fiddler 作为代理。 Fiddler 将 localhost 调用重定向到外部服务器。

我将 Firefox 配置为使用手动代理(127.0.0.1 端口 8888)。 Fiddler 使用 URL 过滤器捕获调用并将它们重定向到另一台服务器。

【讨论】:

【参考方案9】:

允许跨域:

    输入about:config 接受小心 在搜索栏中输入security.fileuri.strict_origin_policy 改为假

您现在可以关闭该选项卡。通常,您现在可以使用此配置进行跨域请求。

更多详情请见here。

【讨论】:

【参考方案10】:

您可以查看我的 Firefox 插件。它允许在最新的firefox版本中跨域:https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors/

【讨论】:

【参考方案11】:

手动编辑firefox的设置是可行的,但是当你需要经常这样做时会很不方便。

相反,您可以安装一个插件,一键即可完成。

我使用CORS everywhere,这对我来说非常有用。

这里是a link to the installer

【讨论】:

仅链接到其他资源的答案通常被认为是错误的,因为它们可能会随着时间而改变。请在答案中添加最相关的部分。

以上是关于Firefox 设置启用跨域 Ajax 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Firefox 中的跨域请求失败

解决jquery ajax在跨域访问post请求的时候,ie9以下无效(包括ie9)的问题

CORS 请求在 Firefox 中中止,而不是在 Chrome 或 IE 中

nginx 实现 ajax 跨域请求

Internet Explorer 中跨站点请求的访问控制

Nginx服务器中处理AJAX跨域请求的配置方法讲解