我需要暂时允许跨域 XMLHttpRequest。更改 Firefox 安全设置似乎是要走的路。但是我已经尝试过这个和这个,但它们没有用。以前有没有人能够配置这个?谢谢。
11 回答
如果您只是不想在开发和测试应用程序期间将时间浪费在跨域问题上,您可以使用插件Force CORS for FF。
更新:这个插件似乎不再存在。但还有另一种选择 - 这个Chrome 扩展
对于现代浏览器,您可以尝试以下方法:
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
你试过使用 jQuery 的ajax请求吗?从 1.3 版开始,jQuery 支持某些类型的跨域 ajax 请求。
引用上面的参考资料:
注意:当 'script' 或 'jsonp' 是 dataType 时,所有远程(不在同一个域上)请求都应指定为 GET(因为它使用 DOM 脚本标签加载脚本)。需要 XMLHttpRequest 对象的 Ajax 选项不适用于这些请求。complete 和 success 函数在完成时调用,但不接收 XHR 对象;不调用 beforeSend 和 dataFilter 函数。
从 jQuery 1.2 开始,如果指定 JSONP 回调,则可以加载位于另一个域中的 JSON 数据,可以像这样:“myurl?callback=?”。jQuery 自动替换 ? 使用正确的方法名称调用,调用您指定的回调。或者,如果您将 dataType 设置为“jsonp”,则会自动将回调添加到您的 Ajax 请求中。
事情是这样的,没有办法“暂时”禁用跨域 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。
我也尝试过使用“UniversalBrowswerRead”的东西,但它没有用。您也许可以添加一个“允许”标题,但我还没有真正尝试过这样做。这很新。
你可以在这里找到更多信息
我正面临着这个从file://
。我想从本地 HTML 文件(测试平台)向两台服务器发送查询。
这种特殊情况不应该是任何安全问题,但只有 Safari 允许这样做。
这是我发现的关于这个问题的最佳讨论。
使用 mod_proxy 之类的东西怎么样?然后它在您的浏览器中看起来就像请求将发送到同一台服务器,但它们实际上是被转发到另一台服务器。
我使用 Fiddler 作为代理。Fiddler将 localhost 调用重定向到外部服务器。
我将 Firefox 配置为使用手动代理(127.0.0.1 端口 8888)。Fiddler 使用 URL 过滤器捕获调用并将它们重定向到另一台服务器。
允许跨域:
- 进入
about:config
- 接受要小心
security.fileuri.strict_origin_policy
在搜索栏中输入- 改为假
您现在可以关闭选项卡。通常,您现在可以使用此配置进行跨域请求。
有关更多详细信息,请参见此处。
您可以查看我的 Firefox 插件。它允许在最新的 firefox 版本中跨域:https ://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors/