是否有任何关于浏览器允许和不允许文件:方案 URI 的综合文档?

Posted

技术标签:

【中文标题】是否有任何关于浏览器允许和不允许文件:方案 URI 的综合文档?【英文标题】:Is there any comprehensive documentation for what browsers do and don't allow for file: scheme URIs? 【发布时间】:2020-09-08 21:47:15 【问题描述】:

如果你能避免它,大多数人不会使用file: URI,因为关于什么是允许的和不允许的,有很多古怪的规则,但有时这不取决于你,你只需要支持加载一个来自file: URI 的 html 文件或应用程序。

对于那些时候,是否有任何关于浏览器允许和不允许 file: URI 的全面且最新的文档或指南?那里有信息,但它是零碎的。例如,This question 说明您无法在 Chrome 中通过 file: URI 加载 ES 模块,但在 Firefox 中可以。但是fetch()、WASM 或其他现代 Web 技术呢?也许他们不支持file:,但支持data:,如果你能用正确的MIME类型构造一个?

如果您只需要支持从本地 file: URI 运行 Web 应用程序,这将非常有用,如果有一个指南列出了在所有浏览器中一致的工作方式,那么如果您坚持使用这几项技术,您的应用程序就可以运行。有谁知道这样的事情?我试过搜索网络和 MDN,但没有找到任何东西,但这可能是因为似乎大多数搜索引擎都忽略了 file: 中的冒号。

【问题讨论】:

我的建议是,file:/// 方案对静态页面很有用,可能需要一点 javascript,但肯定没有 AJAX - 其他任何东西,不要使用它 你可以用它做很多事情,特别是如果你可以在 html 文件本身中包含所有内联内容。如果您必须参考其他文件,事情就会崩溃。您可以加载任何 JS 文件、引用 CSS 和图像(但不能将它们的实际内容作为 blob 获取),但许多较新的东西似乎需要正确的 MIME 类型。也许file: 让你陷入了十年前的网络技术陷阱,但如果能够可靠地使用那之后的任何东西,那将是一件好事。 【参考方案1】:

在这里我发现了一个有趣的article。他们基本上说:

Chromium 允许从 file:// URI 提供的 HTML 页面从同一路径加载图像和脚本,但 Legacy Edge (v18) 和 Internet Explorer 是唯一将所有本地 PC 的 file:// URI 视为同源,允许此类页面引用本地计算机上的其他 HTML 资源。其他浏览器将文件来源视为唯一的,从而阻止来自不同本地文件的帧之间的 DOM 交互等。

基于此whatwg1 或whatwg2 或w3:

它是 UA 特定的“留给读者作为练习”

对于Chrome:

file:// 计划 URI 不包含主机组件;确保您的 UI 考虑了这种可能性。

对于Mozilla:

file:特定于主机的文件名

所以基本上,这是一团糟,因为他们必须面对安全问题。

其他资源:

Stack similar question Chromium discution More doc

【讨论】:

以上是关于是否有任何关于浏览器允许和不允许文件:方案 URI 的综合文档?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测shiro是不是允许uri或从uri中提取控制器名称

如何为 nginx 请求设置允许的 url 长度(错误代码:414,uri 太大)

关于sql中的exists,写上和不写是否没啥区别,是否只是提高了执行效率

URL与URI

REST 和 URI 缓存

是否有永久修复 SVN 校验和不匹配的解决方案?