Firefox设置启用跨域Ajax请求

时间:2009-03-20 19:04:27

标签: javascript http xmlhttprequest

我需要暂时允许跨域XMLHttpRequest。改变firefox安全设置似乎是要走的路。但我尝试使用thisthis,但他们没有工作。有没有人能够配置这个?感谢。

11 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:21)

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

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的答案

答案 2 :(得分:9)

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

引自上述参考文献:

  

注意:所有遥控器(不是相同的   域名)请求应该被指定   当'script'或'jsonp'是GET时获取   dataType(因为它加载脚本   使用DOM脚本标记)。 Ajax选项   需要XMLHttpRequest对象   不适用于这些请求。   完整和成功的功能是   要求完成,但不要   收到XHR对象;之前发送   和dataFilter函数不是   调用。

     

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

答案 3 :(得分:7)

这就是事情,没有办法“暂时”禁用跨域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。

答案 4 :(得分:2)

我也试过使用'UniversalBrowswerRead'这个东西而且它不起作用。你可能可以添加一个'allow'标题,但我还没有尝试过。这很新。

您可以找到更多信息here

答案 5 :(得分:2)

我是从file://面对的。我想从本地HTML文件(测试平台)向两台服务器发送查询。

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

以下是我发现问题的best discussion

答案 6 :(得分:1)

使用mod_proxy这样的东西怎么样?然后它会向您的浏览器查看请求是否会转到同一台服务器,但它们实际上是转发到另一台服务器。

答案 7 :(得分:1)

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

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

答案 8 :(得分:0)

允许跨域:

  1. 输入about:config
  2. 接受要小心
  3. 在搜索栏中输入security.fileuri.strict_origin_policy
  4. 更改为false
  5. 您现在可以关闭标签了。通常,您现在可以使用此配置发出跨域请求。

    有关详细信息,请参阅here

答案 9 :(得分:0)

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

答案 10 :(得分:-1)

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

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

我使用CORS everywhere,这对我很有用。

这是a link to the installer