同源政策如何运作?

时间:2016-02-11 14:05:37

标签: w3c same-origin-policy

根据https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy,浏览器限制同一来源内的资源访问。但是,我认为几乎每个网站都有类似的内容:

<script src="http://partner.googleadservices.com/gpt/pubads_impl_79.js" async=""></script>

这里的src是一个外部资源。它违反了同源政策吗?

2 个答案:

答案 0 :(得分:4)

我们假设partener.googleadservices.com为网站B,而您的某些网站将www.foobar.com称为网站B
对于除GET之外的请求(如POST,PUT等)和具有自定义标头的GET,浏览器向B(HTTP OPTIONS)发送一个包含Site A值的Origin Header的飞行前请求。然后,站点B可以验证这一点值并使用Access-Control-Allow-Origin标头回复(它也可以简单地通过'*'表示允许所有网站)。
如果Access-Control-Allow-Origin的值不包含站点A,则尊重CORS策略的浏览器只会阻止该请求。

有关<script>标记的查询,我发现网站A发送了GET请求。因此,在这种情况下,浏览器没有义务阻止访问站点B,因为它不是GET,也不发送任何自定义头。您可以在Chrome浏览器中打开Inspect模式并观察正在进行的调用。

查看https://en.wikipedia.org/wiki/Cross-origin_resource_sharing#How_CORS_works了解详情

答案 1 :(得分:2)

相同的源策略会影响所谓的AJAX请求。它与脚本标签无关。脚本标记可以加载来自不同来源的资源。为了更清楚地阐明原点:如果主机(例如www.google.com)或端口(例如80)不同,它的来源不同。 JSONP(https://en.wikipedia.org/wiki/JSONP)滥用脚本标记来解决相同的源策略。所以它不违反同一原产地政策。