Hekyのblog

解决浏览器 CORS 报错:Access to Script Blocked by CORS Policy

问题背景

在前端开发中,尤其是本地开发时,我们常常直接通过双击 HTML 文件的方式使用浏览器打开网页,路径通常是 file:// 开头的 URL。例如:

file:///D:/web_study/20241217/index.html

在这种情况下,如果你尝试加载 JavaScript 文件,会遇到以下报错:

报错信息

Access to script at 'file:///D:/web_study/20241217/index.js' from origin 'null' has been blocked by CORS policy: 
Cross origin requests are only supported for protocol schemes: chrome, chrome-extension, chrome-untrusted, data, http, https, isolated-app.

GET file:///D:/web_study/20241217/index.js net::ERR_FAILED

报错解析

  1. CORS 限制:浏览器出于安全考虑,默认启用了同源策略(CORS)。当使用 file:// 协议时,浏览器无法确定源 (origin),因此请求被阻止。
  2. ERR_FAILED:网络请求失败,是因为 CORS 策略拒绝加载 JavaScript 文件。

报错原因

现代浏览器的安全机制 CORS(跨域资源共享) 仅支持以下协议:

file:// 协议不在允许列表内,因此直接打开 HTML 文件并加载 JavaScript 时会触发错误。

解决方案

方法一:使用本地 HTTP 服务器(推荐)

最根本的解决方法是通过本地 HTTP 服务器运行项目,而不是直接打开 file:// 链接。

1. 使用 VSCode 的 Live Server 插件

2. 使用 Python 内置 HTTP 服务器

Python 自带一个简单的 HTTP 服务器,可以在本地快速启动:

3. 使用 Node.js 的 http-server 工具

如果你安装了 Node.js,可以使用 http-server 包:


方法二:调整 Chrome 浏览器启动参数(临时解决,不推荐)

这种方法临时禁用浏览器的安全策略,仅适用于测试环境。不要在生产环境使用!

⚠️ 警告:此方法存在安全风险,绕过了浏览器的安全机制,仅用于临时测试。


总结

出现 "Access to script at ... has been blocked by CORS policy" 的错误,通常是因为浏览器默认禁止了通过 file:// 协议加载外部资源。解决这个问题最好的方法是使用本地 HTTP 服务器运行项目,比如:

通过这些工具,你可以在本地以 http:// 协议访问文件,解决 CORS 报错问题,提升开发效率。

推荐做法

启动一个本地 HTTP 服务器,这是现代前端开发的标准做法,既安全又高效。


希望这篇文章能帮你解决开发中遇到的 CORS 问题!😊 如果有其他问题,欢迎留言交流。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »