为啥以及如何在脚本标签中免除同源策略?

Posted

技术标签:

【中文标题】为啥以及如何在脚本标签中免除同源策略?【英文标题】:Why and how is same origin policy exempted in script tags?为什么以及如何在脚本标签中免除同源策略? 【发布时间】:2017-10-14 14:32:24 【问题描述】:

我有一个非常简单的问题。为什么以及如何针对脚本、链接 img 等内容豁免同源政策?

我相信使用 GET 加载脚本和链接的方式与调用服务器 API 类似。那么区别是什么呢。为什么在这些标签中豁免此政策不会伤害我们。

我发现这个 (Why is the html SCRIPT tag not subject to the same origin policy) 只是关于 SO 的问题,它没有令人满意的答案,甚至没有被接受的答案。

【问题讨论】:

【参考方案1】:

发送 GET 请求(即使使用 cookie)是无害的; GET 请求不应该有任何副作用。

这些标签都不允许调用页面(直接)读取响应,因此它们不会泄露信息。

因此,允许它(几乎)没有任何问题。

【讨论】:

我理解 GET 在服务器端是幂等的。但是它不能使用响应在客户端进行任何更改吗?可能我没理解——这些标签都不允许调用页面(直接)读取响应,所以它们不会泄漏信息。 那么响应是如何使用的呢?? 它们被执行或显示在屏幕上,但不直接暴露给 javascript 抱歉,我还有一个问题,它们是在哪个上下文中执行的。即使在全局上下文中,它们也可以更改全局变量/函数(如果他们愿意的话)。 是的,但这取决于远程脚本。 因此,当我加载 CDN 时,我是否会受到提供商的摆布,以免干扰我们的代码。不过对我来说似乎完全荒谬....!!!!!!

以上是关于为啥以及如何在脚本标签中免除同源策略?的主要内容,如果未能解决你的问题,请参考以下文章

同源策略,外部脚本

关于Jsonp 跨域

同源策略

浏览器的同源策略与跨域处理

跨域问题’以及如何解决

同源策略:JSONP和CORS