JavaScript 同源策略 - 它如何应用于不同的子域?
Posted
技术标签:
【中文标题】JavaScript 同源策略 - 它如何应用于不同的子域?【英文标题】:JavaScript Same Origin Policy - How does it apply to different subdomains? 【发布时间】:2011-02-02 09:08:26 【问题描述】:同源策略如何应用于以下两个域?
http://server1.MyDomain.com
http://server2.MyDomain.com
如果内容是从 server2 检索的,我可以在 server1 上托管的页面上运行 JS 吗?
edit 根据 Daniel 下面的回答,我可以使用 <script>
标签在不同子域之间包含脚本,但是异步请求呢?如果我从 server2 下载脚本到 server1 上托管的页面会怎样。我可以使用脚本与 server2 上的服务进行异步通信吗?
【问题讨论】:
里程会因 IE 而有所不同,但一般规则是相同的主机,相同的端口用于直接 XHR。您可以从您选择的任何地方加载脚本,但就异步而言,JSONP 脚本注入是您唯一没有代理的选择。 【参考方案1】:您只能使用<script>
标签在不同子域之间包含脚本,因为它不受政策约束。
使用http://www.example.com/dir/page.html
作为源(来自Wikipedia):
Compared URL Outcome Reason
---------------------------------------------------------------------------------------------
http://www.example.com/dir/page.html Success Same protocol and host
http://www.example.com/dir2/other.html Success Same protocol and host
http://www.example.com:81/dir2/other.html Failure Same protocol and host but different port
https://www.example.com/dir2/other.html Failure Different protocol
http://en.example.com/dir2/other.html Failure Different host
http://example.com/dir2/other.html Failure Different host (exact match required)
http://v2.www.example.com/dir2/other.html Failure Different host (exact match required)
更新:
我可以使用脚本进行交流吗 与服务异步 服务器2?
是的,您可以使用JSONP,它利用<script>
标签的开放政策从其他来源检索JSON。
您可能还想考虑使用反向代理,如以下 Stack Overflow 帖子所述:
What am I missing in the XMLHttpRequest?【讨论】:
@Daniel,感谢您的回复。我已经用后续问题编辑了这个问题。你有机会把你的想法加进去吗?谢谢 @Dave:您可能想查看 JSONP。您可能还需要考虑设置反向代理,如下所述:***.com/questions/2482916/… 这是一个很好的、彻底的答案。【参考方案2】:当然,您可以运行您插入的任何脚本,不管它来自哪里。想想如何在您的页面上插入谷歌地图。
您描述的是一种称为 jsonp 的模式。其他主机上的服务器返回您在页面中插入的脚本,并且该脚本使用响应参数调用页面中的函数。
【讨论】:
以上是关于JavaScript 同源策略 - 它如何应用于不同的子域?的主要内容,如果未能解决你的问题,请参考以下文章