Jquery 无法在$.ajax请求上设置HTTP主机头
这个话题以前曾被讨论过,但我还没有找到一个适合我的解决方案。我正在使用jquery1.7.1 我有一个REST风格的web服务,可以返回JSON和XML,但是对于这个项目,我需要使用XML端点。为了绕过跨域限制,我使用Perl的HTTP::proxy创建了一个透明代理。这个代理工作起来很轻松,因为我可以在任何地方用HTTP GET客户端与它交谈 因为它是一个透明代理,所以它依赖于在客户端请求中设置的主机头。我的代码如下所示:Jquery 无法在$.ajax请求上设置HTTP主机头,jquery,ajax,proxy,Jquery,Ajax,Proxy,这个话题以前曾被讨论过,但我还没有找到一个适合我的解决方案。我正在使用jquery1.7.1 我有一个REST风格的web服务,可以返回JSON和XML,但是对于这个项目,我需要使用XML端点。为了绕过跨域限制,我使用Perl的HTTP::proxy创建了一个透明代理。这个代理工作起来很轻松,因为我可以在任何地方用HTTP GET客户端与它交谈 因为它是一个透明代理,所以它依赖于在客户端请求中设置的主机头。我的代码如下所示: $.ajax({ type: "GET", cro
$.ajax({
type: "GET",
crossDomain: true, // not needed I think
error: function() { alert('Failed ..'); },
url: "http://www.skiforeningen.no:8080/<remote REST URL>",
dataType: "xml",
headers: {'Host': 'remote REST host'},
success: parseXml,
});
$.ajax({
键入:“获取”,
跨域:是的,//我想不需要
错误:函数(){alert('Failed..);},
url:“http://www.skiforeningen.no:8080/",
数据类型:“xml”,
标头:{'Host':'remoterest Host'},
成功:解析XML,
});
Chrome非常明确,并表示
拒绝设置不安全的标头“主机”
及
无法加载XMLHttpRequest。访问控制不允许原点允许原点
但是代理和带有jquery的HTML页面都位于主机www.skiforeningen.no上
FF还拒绝设置主机头(显然),因为已触发错误事件处理程序
谢谢,您不能在其他主机上执行XHR请求,正如错误消息所告诉您的那样。不同的端口意味着不同的主机 请参阅:某些:
- 接受字符集
- 接受编码
- 访问控制请求头
- 访问控制请求方法
- 联系
- 内容长度
- 饼干
- 库克2
- 日期
- DNT
- 期待
- 功能策略
- 主人
- 活命
- 起源
- 代理-
- 秒-
- 推荐人
- TE
- 拖车
- 传输编码
- 升级
- 通过
因此,如果您不关心响应,那么您的方法可以工作,尽管您可能希望更优雅地处理此预期错误。如果您确实关心响应,则必须在远程服务器上配置CORS,以便跨域读取响应。将
crossDomain
设置为true
,以防止JQuery添加可能导致发出选项请求的任何额外标头(即)。谢谢,我不知道端口限制。我可以通过让Apache在端口80上执行代理来解决这个问题