JavaScript同源策略 - 它如何应用于不同的子域?

时间:2010-03-30 08:33:30

标签: javascript same-origin-policy

同源策略如何适用于以下两个域?

http://server1.MyDomain.com

http://server2.MyDomain.com

如果从server2中检索内容,我可以在server1上托管的页面上运行JS吗?

编辑根据Daniel的回答,我可以使用<script>标记在不同子域之间添加脚本,但异步请求呢?如果我将脚本从server2下载到server1上托管的页面上该怎么办?我可以使用脚本与server2上的服务异步通信吗?

2 个答案:

答案 0 :(得分:24)

您只能使用<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帖子所示:

答案 1 :(得分:0)

当然,您可以运行任何您插入的脚本,从不介意它来自哪里。考虑如何在您的页面上插入谷歌地图。

您描述的是一种名为jsonp的模式。如果其他主机上的服务器返回您在页面中插入的脚本,则脚本会使用响应参数调用页面中的函数。