避免 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 跨域限制的主要内容,如果未能解决你的问题,请参考以下文章