同源政策如何运作?

How Same-origin policy works?

根据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是外部资源。它是否违反同源策略?

同源政策影响所谓的AJAX-请求。它与脚本标签无关。脚本标签可以加载来自不同来源的资源。进一步澄清来源:如果主机(例如 www.google.com)或端口(例如 80)不同,则它不是同一来源。 JSONP (https://en.wikipedia.org/wiki/JSONP) 滥用脚本标签来绕过同源策略。所以不违反同源政策。

让我们假设 partener.googleadservices.com 作为网站 B,而您的某些网站称 www.foobar.com 作为网站 B
对于 GET 以外的请求(如 POST、PUT 等)和具有自定义 headers 的 GET,浏览器会向 B(HTTP OPTIONS)发送一个 pre-flight 请求,Origin [=26] =] 包含站点 A 的值。然后站点 B 可以验证此值并使用 Access-Control-Allow-Origin header 进行响应(它也可以简单地传递“*”以指示允许所有网站)。
如果 Access-Control-Allow-Origin 的值不包含站点 A,则遵守 CORS 策略的浏览器会简单地阻止请求。

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

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