许多浏览器不允许您使用 JavaScript 访问本地文件系统上的文件(即使 HTML 文档也在本地文件系统上)。
(来源)
是的,我知道解决方案是“安装并使用 HTTP 服务器进行本地开发”,但我不明白为什么需要这样做?允许网页访问本地文件系统显然是可怕的,但是从本地文件系统访问本地文件系统的风险是什么?
每当我运行 shell 脚本时,我都会这样做,并且 shell 脚本不会阻止我运行cat
. 如果我从本地文件系统运行任何东西(无论是任意可执行文件、我自己编译的可执行文件,还是包含 HTML 或 JS 文档的解释脚本!),我得到它的方式我应该知道我的正在运行。为什么 JS 脚本可以在不受此假设影响的浏览器中运行?如果我有从本地文件系统不小心运行恶意软件的习惯,除了打开 HTML 文档之外,我很容易以多种方式搞砸自己。
另外:CORS不应该禁止跨域资源加载吗?据我了解,从本地文件系统资源请求本地文件系统资源几乎不是cross-origin,而是同源,所以我不明白 CORS 为什么会抱怨。
最重要的是,是否需要我为本地开发运行 HTTP 服务器来改进什么?这样做需要我在 localhost 上不必要地打开一个端口。显然,这可以通过阻止外部世界与我的本地服务器通信的方式来完成(拒绝传入连接还不够吗?)但是如果我不需要,为什么要打开侦听端口呢?
我在这里不明白什么?
编辑:再想一想,我确实看到了一个原因。浏览器允许用户在本地保存网页。能够以一种不会损坏本地系统的方式打开此类网页,而不是从 Internet 加载同一网页,这将是有意义的。