jquery - 无法在 $.ajax 请求上设置 HTTP 主机 header

标签 jquery ajax proxy

这个主题之前已经以不同的方式讨论过,但我还没有找到适合我的解决方案。我正在使用 jquery 1.7.1。

我有一个 REST 风格的 Web 服务,可以返回 JSON 和 XML,但对于这个项目,我需要使用 XML 端点。为了绕过跨域限制,我使用 Perl 的 HTTP::Proxy 创建了一个透明代理。该代理工作起来非常轻松,因为我可以从任何地方与 HTTP GET 客户端进行通信。

由于它是透明代理,因此它依赖于客户端请求中设置的 Host header 。我的代码如下所示:

  $.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,
});

Chrome 非常明确地表示

Refused to set unsafe header "Host"

XMLHttpRequest cannot load http://www.skiforeningen.no:8080/sted/Norge/Oslo/Oslo/Skansebakken/varsel.xml. Origin http://www.skiforeningen.no is not allowed by Access-Control-Allow-Origin

但是代理和带有 jquery 的 HTML 页面都位于主机 www.skiforeningen.no 上。

由于错误事件处理程序被触发,FF 也拒绝设置主机 header (显然)。

谢谢

最佳答案

您无法在不同的主机上执行 XHR 请求,就像错误消息告诉您的那样。不同的端口意味着不同的主机。

参见:Can I use XMLHttpRequest on a different port from a script file loaded from that port?

关于jquery - 无法在 $.ajax 请求上设置 HTTP 主机 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865896/

相关文章:

jquery - 如何通过匹配范围内的文本来选择按钮

php - Jquery 对话框加载数据库 mysql 或 ajax 上的内容

javascript - 冷聚变中如何通过ajax和jquery加载页面?

javascript - 如何更改我的 ajax 渲染属性的 anchor 标记中的字形图标?

maven - 仅在访问某些 Maven 存储库时使用带有 Gradle 的代理?

jquery - 如何使用 jquery 对 json 数组求和

c# - Watin 触发的 onchange 事件中的对话框

asp.net - 在 ASMX Web 服务中对同一 WebMethod 使用 POST 和 GET Ajax 调用

node.js - 在 express 上使用 nginx 和 ssl 实现的反向代理失败

python-3.x - 如何通过 Selenium 在 Chrome 浏览器中使用 Tor