避免 AJAX 跨域限制

Posted

技术标签:

【中文标题】避免 AJAX 跨域限制【英文标题】:Avoiding AJAX cross domain limitations 【发布时间】:2013-12-29 04:13:38 【问题描述】:

如果带有 $.getJSON 的 JS 文件从与 AJAX 请求中的 URL 相同的服务器(域)加载,是否可以避免 AJAX 跨域请求限制? 假设我在 serverA.com 上有一个 web 服务,需要从其他几个域的页面调用,例如subdomain.serverA.com、serverB.com 等 JS 放置在 serverA.com 上,并包含在具有绝对 URL 的不同域的多个页面中:

<script src="http://serverA.com/ajax.js" />

当页面 URL 是例如http://serverB.com/page.html

在这种情况下,$.getJSON('http://serverA.com/service/',... 是否会避免跨域限制?

换句话说,浏览器在评估 AJAX 请求的同源策略时会查看页面 URL 或 JS 源 URL?

【问题讨论】:

我想您是在问“我可以绕过跨域限制吗?”。在这种情况下,答案是“是”,使用 JSONP - ***.com/questions/5943630/… 您是否尝试过在互联网上搜索?我在谷歌上搜索了你的问题标题,第二个结果是:***.com/questions/11299438/… 【参考方案1】:

听起来你在问“我可以绕过 javascript 的跨域限制吗?”

答案是“是”,使用 JSONP

这里有很多很好的信息:

Basic example of using .ajax() with JSONP? Ways to circumvent the same-origin policy jQuery - How to remove cross domain limitation

如果这不是您要问的问题,那么您可能需要稍微澄清一下。

【讨论】:

@Quentin 解决了我的疑虑。感谢您链接良好的资源,代理解决方案似乎在我的环境中实现起来最简单。【参考方案2】:

换句话说,浏览器在评估 AJAX 请求的同源策略时会查看页面 URL 或 JS 源 URL?

同源策略基于运行脚本的 HTML 文档的 URL,而不是脚本本身的 URL。

如果带有 $.getJSON 的 JS 文件从与 AJAX 请求中的 URL 相同的服务器(域)加载,是否可以避免 AJAX 跨域请求限制?

Yes,但不是因为 JS 文件是从那里加载的。脚本的 URL 无关紧要。

【讨论】:

【参考方案3】:

我会推荐 Cross Origin Resource Sharing,而不是 JSONP。

服务的所有者,只需添加一个标头,给出(静态、动态或开放)授权来源列表。

【讨论】:

以上是关于避免 AJAX 跨域限制的主要内容,如果未能解决你的问题,请参考以下文章

解决浏览器跨域限制发送ajax请求

Ajax 的跨域限制 - JSON

Ajax跨域Json跨域Socket跨域和Canvas跨域等同源策略限制的解决方法

AJAX跨域问题解决方法——禁止浏览器进行跨域限制

AJAX跨域最全解决方案

Ajax跨域问题