可以从通过 file:// 协议打开的本地文件访问由 http(localhost 或远程)提供的文件吗?反之亦然?如何实施?
Posted
技术标签:
【中文标题】可以从通过 file:// 协议打开的本地文件访问由 http(localhost 或远程)提供的文件吗?反之亦然?如何实施?【英文标题】:Can a file served by http (localhost or remote) be accessed from a local file opened through file:// protocol? And vice versa? How to implement this? 【发布时间】:2016-08-07 10:40:13 【问题描述】:我有几个 html 文件(TiddlyWiki Classic 实例)存储在 USB 记忆棒上(为了保持可移动,我通过 file://
协议打开它们)。我使用 Ajax(通过SharedTiddlersPlugin,但这并不是那么重要)将其中一些内容加载到其他内容中,效果很好。
我还使用 localhost 设置了几个 TW(WAMP @ Windows 10 和一个名为 MicroTiddlyServer 的简单保存服务器,可以找到最新版本 here)。但是从本地主机到文件以及从文件到本地主机的“包括”(通过 Ajax 请求)不起作用。
所以,问题是哪些方式包含(使用 javascript 加载 html 的内容)是可能的:
-
从文件到本地主机?这意味着我在本地主机上打开一个 TW 并在我的 USB 记忆棒上获取文件的内容(看起来像一个很大的安全问题,所以这更有可能是被禁止的,至少使用 Ajax,但可能有一些解决方法),
从本地主机到文件? (我的猜测是可以通过 CORS,但是将 Apache 的
httpd.conf
的 Header set Access-Control-Allow-Origin "*"
添加到 <Directory ...>
会阻止我的服务器(WAMP pack @ Windows 10)工作并将带有 Header set Access-Control-Allow-Origin "*"
内容的 .htaccess
文件放入 TW目录导致Internal Server Error \n The server encountered an internal error or misconfiguration and was unable to complete your request.
)
从远程服务器到文件? (我想这与 2 应该没有太大区别。除了我通常无法配置服务器,因为我不是管理员;但是因为我想使用 TW 作为 RSS 聚合器,所以让我在这里包含这个,太;这也有助于包括我的智能手机上的 from 和 TW,可以使用 php 服务器从那里提供服务;包括智能手机上的 TW 需要 localhost-> 远程服务器,但这似乎也被禁止)
我真的需要一些工作示例(不一定是 TW,只需要 html 文件),因为我有点迷失在所有这些 CORS questions 和教程(后者是关于http,而不是文件协议)。实际上,任何可行的解决方案(不一定通过 Ajax)都可以满足以下条件:
我的 U 盘可以随时取出,除非是保存时间 服务器端部分也可以在android上完成(PHP很好,Python应该也可以,虽然我还没有测试过)并且服务器配置描述得很清楚(嗯,this恰好是在我的情况下还不够清楚) 包括保持异步事实上,quite a number of ways 描述了用于服务器,但使用 file://
则有些不同(无需配置服务器!)。
这个问题的主要目标是了解我是否必须创建一个服务器,一旦插入 USB 棒就可以为 TW 提供服务,或者我可以以“主要是客户端”的方式实现所有 3 个目标(通过file
协议)。但我也希望这些工作示例对其他人有所帮助,因为这个主题似乎有点缺乏记录。
【问题讨论】:
出于安全原因,您不能这样做。 一般来说,它在 javascript 中被沙盒到网络访问,但这个信息可能会帮助 html5rocks.com/en/tutorials/file/dndfiles @n00dl3 你的意思是不是 1.-3。 ? 没有一个,你不能通过meta
标签伪造Access-Control-Allow-Origin
标头,所以我认为你搞砸了......
如果你能做到这一点,任何网站都可以在你的计算机中获取任何文件并将其上传到服务器:重大安全问题......
【参考方案1】:
出于明显的安全原因,这种行为是不允许的。
从文件到本地主机?这意味着我在本地主机上打开一个 TW 并在我的 USB 记忆棒上获取文件的内容(看起来像一个很大的安全问题,所以这更有可能是被禁止的,至少使用 Ajax,但可能有一些解决方法),
这是不允许的,因为您不能在 html meta
标签中使用 Access-Control-Allow-Origin
。
从本地主机到文件?
从远程服务器到文件?
其实也一样,有一个网络服务器,所以机制是一样的。由于没有服务器会响应 Access-Control-Allow-Origin
标头,因此您无法访问 file://
url。
是的,从服务器访问文件肯定是一个安全问题,但为什么从文件提供的 html 访问服务器是一个问题呢?
如果您能做到这一点,您只需在文件资源管理器中双击 file.html
即可将整个硬盘发送到网络上的任何位置...
访问您的内容的唯一方法是提供它,抱歉。
【讨论】:
谢谢。如果您提供一些证明链接,它会更好。以上是关于可以从通过 file:// 协议打开的本地文件访问由 http(localhost 或远程)提供的文件吗?反之亦然?如何实施?的主要内容,如果未能解决你的问题,请参考以下文章