为了账号安全,请及时绑定邮箱和手机立即绑定

http.FileServer 缓存文件并在编辑后提供旧版本

http.FileServer 缓存文件并在编辑后提供旧版本

Go
慕的地6264312 2021-06-29 09:55:09
go 核心中的 http 包有问题。尽管响应正文中的 Content-Length 是正确的,但文件内容似乎已被缓存。这里演示的是我正在编写的应用程序的简化版本。package mainimport (    "fmt"    "net/http")func main() {    http.Handle("/", http.FileServer(http.Dir("./www/")))    err := http.ListenAndServe(":8080", nil)    if err != nil {        fmt.Println(err)    }}现在假设我们有一个非常简单的 html 页面:<!doctype html><html><body>    <p>Hello there</p></body></html>我执行 go 程序并http://localhost:8080在浏览器中访问以显示:Hello there检查响应标头,我可以看到以下内容:Status Code:200 OKAccept-Ranges:bytesContent-Length:68Content-Type:text/html; charset=utf-8Date:Fri, 20 Dec 2013 10:04:03 GMTLast-Modified:Fri, 20 Dec 2013 10:03:32 GMT现在我编辑 html 文件,以便<p>标记包含Hello there everyone并重新加载页面。我得到以下信息:Hello there再次查看我得到的响应标头Status Code:200 OKAccept-Ranges:bytesContent-Length:77Content-Type:text/html; charset=utf-8Date:Fri, 20 Dec 2013 10:04:34 GMTLast-Modified:Fri, 20 Dec 2013 10:04:14 GMT因此,Content-Length已更改以及上次修改但不是 http.FileServer 处理程序提供的实际文件内容。即使在关闭程序并执行go run src/.../main.go. 到目前为止,我发现清除明显缓存的文件版本的唯一方法是重新启动运行程序的机器。我尝试了以下方法:在 win/ubuntu/osx 10.8.5 上执行程序浏览 golang.org/src 上的函数/接口链,查看提供的文件是否缓存在磁盘上的任何位置对此的任何帮助将不胜感激。
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果您使用某种代理,那将是问题所在。一些代理缓存经常使用的文件(通常只有 .js、.css 等,但通常不是 .html)和 IP 地址。如果服务器在您的本地计算机上,请尝试使用localhost127.0.0.1代替 IP 地址,这样请求就不会通过代理。如果不是,您必须配置或禁用代理才能访问最新版本的网站。我不知道这有多普遍,但这就是问题所在。


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信