Jquery 无法在$.ajax请求上设置HTTP主机头

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

这个话题以前曾被讨论过,但我还没有找到一个适合我的解决方案。我正在使用jquery1.7.1

我有一个REST风格的web服务,可以返回JSON和XML,但是对于这个项目,我需要使用XML端点。为了绕过跨域限制,我使用Perl的HTTP::proxy创建了一个透明代理。这个代理工作起来很轻松,因为我可以在任何地方用HTTP GET客户端与它交谈

因为它是一个透明代理,所以它依赖于在客户端请求中设置的主机头。我的代码如下所示:

  $.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
  • 拖车
  • 传输编码
  • 升级
  • 通过
这就是您无法设置主机的原因

关于不能向其他主机执行XHR请求的说法是不正确的-没有任何东西可以阻止请求的发出

该错误仅仅意味着由于同一来源策略(SOP),您自己来源的页面无法访问响应

这表明,当您通过代理观察HTTP请求时,实际上发出了HTTP请求:


因此,如果您不关心响应,那么您的方法可以工作,尽管您可能希望更优雅地处理此预期错误。如果您确实关心响应,则必须在远程服务器上配置CORS,以便跨域读取响应。将
crossDomain
设置为
true
,以防止JQuery添加可能导致发出选项请求的任何额外标头(即)。

谢谢,我不知道端口限制。我可以通过让Apache在端口80上执行代理来解决这个问题