是否有任何方法从文件系统获得304 Not Modified(而不是200和文件的内容)响应,例如,如果我访问file:///img.png并且浏览器已经缓存了这个文件?
我的意思是,我能做到这一点,而不设置一个文件服务器,通过http通信?或者,这只是文件协议的限制?
不能。这是文件协议的限制。事实上,该协议没有定义200或304代码。这些代码是针对http协议的。
至于浏览器是否可以使用文件的缓存副本,客户端负责加载文件资源本身。没有服务器组件知道文件是否被修改。交互中唯一能够知道的组件是浏览器,而它确定知道的唯一方法就是加载文件。
理论上它可以检查时间戳,也许有些浏览器会这样做,但是与以前加载的时间戳相同并不能保证文件未被修改。至少在某些系统上,可以通过系统调用更改最后修改的时间。