« 土豆实验室·GitHub Raw → CDN 链接转换
raw-to-run / 字符串转换玩具
纯前端不发起网络请求不代理
GitHub Raw MIME 事故现场

把 raw.githubusercontent.com
变成能跑的 <script>

GitHub Raw 以 text/plain 返回文件,浏览器据此拒绝执行脚本。粘贴 blob / raw 链接,立刻得到三种 CDN 写法、可复制的 <script> 标签,以及一份不给糖就捣蛋的 MIME 说明书。

>
试试

Why it breaks

浏览器不是看不起你的代码,
它只是不认 text/plain 这身衣服。

当你写 <script src="…raw.githubusercontent.com/…">,浏览器会先看响应头里的 Content-Type。GitHub 明确说「这是纯文本」,再加上 X-Content-Type-Options: nosniff,浏览器连猜都不猜 —— 直接拒绝执行。

01 事故回放

请求:一个勤勤恳恳的 script 标签。

GET /moment/moment/develop/moment.js
host: raw.githubusercontent.com

HTTP/2 200
content-type: text/plain; charset=utf-8
x-content-type-options: nosniff
content-disposition: inline
ConsoleRefused to execute script from
'…/moment.js' because its MIME type
('text/plain') is not executable, and
strict MIME type checking is enabled.
服务器:这是文本→ 浏览器:script 只吃 JS→ 拒绝执行
02 为什么 GitHub 要这样?

这不是 bug,是故意上锁。如果任何人都能让 raw.githubusercontent.com 以 JavaScript 的 MIME 返回内容,它就会变成一个人人可用的免费脚本托管 / XSS 跳板。于是 GitHub 统一按纯文本发,并加上 nosniff。

CDN 则不同:jsDelivr、Statically、raw.githack 会把仓库文件按扩展名推断为 application/javascript,再配长缓存发出去 —— 合同签对了,脚本才能上工。

所以正确的姿势不是「求浏览器通融」,而是换一个愿意正确声明 MIME 的地址。

CDN:application/javascript→ 浏览器:放行→ 执行
03 MIME 安检机 — 亲手放行 / 拦下一个脚本包裹
GitHub Raw / CDN 出口
浏览器执行区
◆ 待投递
<script> 安检 · nosniff
选一个来源,看包裹能不能过安检。
[!]

安全声明:本页只做字符串拼接。它不会请求你粘贴的 GitHub / CDN 地址,不会把远端 JS 插入本页,不会上传任何内容,也没有任何代理或后端。上面那个安检机是纯 CSS/JS 动画,不是真的 fetch。复制走标签后,请自行审查脚本来源与内容。