【问题标题】:jQuery Ajax Cross Origin Issue?jQuery Ajax 跨域问题?
【发布时间】:2014-09-08 16:25:19
【问题描述】:

我们正在从 server1.corp.xyz.com 向 server2.corp.xyz.com 发出 Ajax 请求,但仍然出现跨域错误。这是跨域的有效案例还是我遗漏了什么。可能的解决方案是什么。

【问题讨论】:

  • 是的。这是有效的错误。
  • 我用它作为答案,但后来我意识到你也想要解决这个问题,而我正在解决这个问题 - 这里有一个快速解释:它被认为是不同的主机:en.wikipedia.org/wiki/…
  • 如果您拥有server2.corp.xyz.com,那么一个简单的解决方案是在该域中启用CORS

标签: jquery ajax cross-domain


【解决方案1】:

可能的解决方案是什么。

您可以在 server2.corp.xyz.com 服务器上启用 Cross Origin Resource Sharing,以允许来自 server1.corp.xyz.com 服务器的请求。然后该请求将适用于几乎任何CORS-enabled browser。我说“几乎”是因为您说过您正在使用 jQuery,而且奇怪的是(在我看来),jQuery 在这方面无法解决浏览器不兼容问题,就像其他许多问题一样:IE8 和 IE9 支持 CORS,但是他们不通过标准的XMLHttpRequest 对象支持它;您必须改用 XDomainRequest 对象。 (微软从 IE10 开始就做到了。)所以要让跨域请求在 IE8 或 IE9 上工作,你需要自己直接使用 XDomainRequest 而不是使用 jQuery 的 ajax,或者你需要找到并使用jQuery 的补丁/插件,增加了对 IE8 和 9 的支持(我知道有一些,但我没有具体的推荐)。

【讨论】:

    【解决方案2】:

    您可以在文件夹中使用 htacess 设置来源

    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
    

    或在 Google 中搜索如何设置来源。我更喜欢仅为 server1.corp.xyz.com 域设置原点。 你也可以在apache中设置。

    【讨论】:

    • 在哪里可以在 server1 或 server2 上使用 htacess 设置来源。
    • 您必须在 server2 上创建 .htacess。主要目标是从server1访问Ajax请求到server2。
    • 我在服务器 2 上安装了 Tomcat,我相信我不会被允许在那里进行任何修改。所以看起来我只能走卷曲路线?
    • 你必须从这个开始。你检查了吗tomcat.apache.org/tomcat-8.0-doc/config/filter.html#CORS_Filter 我认为这是给 Tomcat 的 :)
    • 替代方案是使用带有回调的 JSONP - 但我不是 100% 如何使用它。