Refused to Execute Script From Because Its MIME Type (Text/plain) Is Not Executable, and Strict MIME

今天又与这个问题相遇了,Orz,还是研究一下解决方法和出现原因吧。 刚刚在github上传了一个js文件,想让这个文件被其他网页引用,于是贴出了这个文件的raw版本的地址。但是却就遇到了这样的问题。

这就是出现错误的代码

1 2 3 4 5 6 7

<html> <script src="http://droidyue-tools.qiniudn.com/jquery.min.js"></script> <script src="https://raw.githubusercontent.com/androidyue/weekly-scripts/master/javascript/target_blank_link.js"></script> <div> <a href="http://droidyue.com">droidyue.com</a> </div> </html>

解决方法

将上面的链接中的raw.githubusercontent.com换成rawgit.com即可,此例中的网址最终为 https://rawgit.com/androidyue/weekly-scripts/master/javascript/target_blank_link.js

原因

因为raw.githubusercontent.com在Response中设置了X-Content-Type-Options:nosniff,告诉浏览器强制检查资源的MIME,进行加载。

下面就是未处理的HTTP Response

lineos:false

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

HTTP/1.1 200 OK Date: Sat, 27 Sep 2014 09:27:12 GMT Server: Apache Access-Control-Allow-Origin: https://render.githubusercontent.com Content-Security-Policy: default-src 'none' X-XSS-Protection: 1; mode=block X-Frame-Options: deny X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=31536000 ETag: "4f10b14e4a81a195976ea05787287a019c8bcf6f" Content-Type: text/plain; charset=utf-8 Cache-Control: max-age=300 Content-Encoding: gzip Content-Length: 204 Accept-Ranges: bytes Via: 1.1 varnish X-Served-By: cache-lax1426-LAX X-Cache: HIT X-Cache-Hits: 1 Vary: Authorization,Accept-Encoding Expires: Sat, 27 Sep 2014 09:32:12 GMT Source-Age: 44 Keep-Alive: timeout=10, max=50 Connection: Keep-Alive

X-Content-Type-Options:nosniff 是神马

1 如果服务器发送响应头 “X-Content-Type-Options: nosniff”,则 script 和 styleSheet 元素会拒绝包含错误的 MIME 类型的响应。这是一种安全功能,有助于防止基于 MIME类型混淆的攻击。

2 服务器发送含有 “X-Content-Type-Options: nosniff” 标头的响应时,此更改会影响浏览器的行为。

3 如果通过 styleSheet 参考检索到的响应中接收到 “nosniff” 指令,则 Windows Internet Explorer 不会加载“stylesheet”文件,除非 MIME 类型匹配 “text/css”。

4 如果通过 script 参考检索到的响应中接收到 “nosniff” 指令,则 Internet Explorer 不会加载“script”文件,除非 MIME 类型匹配以下值之一:

  • “application/ecmascript”
  • “application/javascript”
  • “application/x-javascript”
  • “text/ecmascript”
  • “text/javascript”
  • “text/jscript”
  • “text/x-javascript”
  • “text/vbs”
  • “text/vbscript”

该部分参考减少 MIME 类型的安全风险

进阶书籍

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一场梦

Servlet HTTP 状态码大全列表

13530
来自专栏用户2442861的专栏

Session原理和Tomcat实现分析

这篇文章挖掘Session的原理和tomcat实现机制。     由于HTTP是无状态的协议,客户程序每次都去web页面,都打开到web服务器的单独的连接,并...

33320
来自专栏Laoqi's Linux运维专列

配置防盗链

配置防盗链 : 防止别人盗取引用自己的内部资源链接! 实例解析: 维护一个A论坛(论坛成员可以免费上传图片或其它资源到服务器),突然发现这个月的流量比前几个月的...

43950
来自专栏xingoo, 一个梦想做发明家的程序员

【java开发系列】—— struts2简单入门示例

前言   最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的。   stru...

20750
来自专栏技术博文

http状态码一览表

http状态码一览表 1**:请求收到,继续处理 2**:操作成功收到,分析、接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完成 5...

38770
来自专栏大内老A

谈谈基于OAuth 2.0的第三方认证 [下篇]

从安全的角度来讲,《中篇》介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获...

21680
来自专栏码匠的流水账

spring security oauth2之refresh token

本文就来讲一讲spring security oauth2的refresh token方式

51120
来自专栏V站

Servlet HTTP 状态码大全列表

状态行包括 HTTP 版本(在本例中为 HTTP/1.1)、一个状态码(在本例中为 200)和一个对应于状态码的短消息(在本例中为 OK)。

17020
来自专栏Python研发

Django之Session

答:       Django 完全支持匿名 Session的。 Session 框架允许每一个用户保存并取回数据。它将数据保存在服务器端,并将发送和接收, C...

31130
来自专栏Ryan Miao

SpringMVC,SpringBoot文件下载

前言 最近严查security, 导致原来暴露出去的s3不能用了,不允许public的s3,暂时的折中方案是自己做跳转。于是需要在SpringMVC中实现文件...

38150

扫码关注云+社区

领取腾讯云代金券