1
2
3
|
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"></script>
|
看起来比之前的写法复杂好多的样子。先不着急慢慢看,多了一个 integrity 属性,看值的样子就知道是用来验证文件完整性的。另外还有一个 crossorigin 属性……怎么?直接经过 script 标签加载网站外 JS 资源也要开始考虑跨域的问题了吗?html
这里不讨论 script
里 crossorigin 属性怎么用,以及服务器端如何支持此属性,MDN 上的文档已经说得很清楚。jquery
不知道你们对此新属性的感受如何,个人第一感受是:新加了这么一个属性,难道是之前 script 不用 crossorigin 属性的时候,会出什么问题吗?到底可能会出什么问题呢?bootstrap
从谷歌的结果来看,比较一致的说法是,引入跨域的脚本(好比用了 apis.google.com 上的库文件),若是这个脚本有错误,由于浏览器的限制(根本缘由是协议的规定),是拿不到错误信息的。当本地尝试使用 window.onerror
去记录脚本的错误时,跨域脚本的错误只会返回 Script error
。api
但 HTML5 新的规定,是能够容许本地获取到跨域脚本的错误信息,但有两个条件:一是跨域脚本的服务器必须经过 Access-Controll-Allow-Origin
头信息容许当前域名能够获取错误信息,二是当前域名的 script
标签也必须指明 src
属性指定的地址是支持跨域的地址,也就是 crossorigin 属性。跨域
但事情仍是不够明朗,看起来报个错也没什么啊,为何浏览器或者说协议这么龟毛,非要规定默认页面是不能获取跨域脚本错误信息的呢?浏览器
这其实跟网络安全有关,不妨举一个例子来讲明。安全
咱们先假设浏览器默承认以将跨域脚本的错误信息返回。服务器
这个时候我在个人博客里写下以下代码:网络
1
2
3
|
<script src="http://某个银行/会员信息网址">
<script src="http://某个银行2/会员信息网址">
...
|
注意 src 里面提到地址,都是 HTML 页面的地址,当成 JS 来执行,确定是会报错的。框架
由于咱们假设浏览器能报具体错误,这个错误多是相似于:
1. “请登陆” is undefined.
2. “您好” is undefined.
咱们经过报错信息的不一致,可能能够推断出当前访问我博客的会员在某某银行是否有帐号。虽然不是什么大问题,但隐私的确是泄漏了,若是我是攻击者我可能会经过会员在某家银行有帐号,『精准』推送相关的钓鱼网站给他。
说清楚了前因后果,咱们就能够更好的判断,咱们是否真的须要给 script
标签加上 crossorigin 属性了。另外除了 script
,全部能引入跨域资源的标签包括 link
和 img
之类,都有同样的属性。