Go 中的 http.FileServer 旨在为给定文件系统中的静态文件提供服务,提供了一种高效且便捷的方式托管网络内容。但是,某些情况可能会导致意外的缓存行为,从而导致提供过时的文件。
使用 Virtual Box 共享文件夹存储 http.FileServer 的文件时会出现这样的问题。在这种情况下,问题与主机和来宾操作系统之间这些文件的同步访问有关。
为了说明这一点,让我们考虑提供的示例:
<code class="go">http.Handle("/", http.FileServer(http.Dir("./www/"))) err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println(err) }</code>
使用 HTML文件如下:
<code class="html"><!doctype html> <html> <body> <p>Hello there</p> </body> </html></code>
最初提供时,内容显示正确,并且响应标头显示适当的内容长度和上次修改时间戳。
但是,对 HTML 进行更改后文件并重新加载页面,仍显示原始内容。这是因为由于主机和来宾之间的同步问题,操作系统未正确缓存修改后的文件。即使退出并重新启动程序后也会出现此行为。
此问题的解决方案是在为 http.FileServer 托管文件时避免使用 Virtual Box 共享文件夹。通过将文件直接存储在来宾操作系统上,可以消除同步问题,从而使文件服务器能够正确缓存文件并提供更新的内容。
以上是使用 Virtual Box 共享文件夹时,为什么我的 Go http.FileServer 提供过时的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!