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

go 核心中的 http 包有问题。尽管响应正文中的 Content-Length 是正确的,但文件内容似乎已被缓存。这里演示的是我正在编写的应用程序的简化版本。


package main


import (

    "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 OK

Accept-Ranges:bytes

Content-Length:68

Content-Type:text/html; charset=utf-8

Date:Fri, 20 Dec 2013 10:04:03 GMT

Last-Modified:Fri, 20 Dec 2013 10:03:32 GMT

现在我编辑 html 文件,以便<p>标记包含Hello there everyone并重新加载页面。我得到以下信息:


Hello there

再次查看我得到的响应标头


Status Code:200 OK

Accept-Ranges:bytes

Content-Length:77

Content-Type:text/html; charset=utf-8

Date:Fri, 20 Dec 2013 10:04:34 GMT

Last-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 上的函数/接口链,查看提供的文件是否缓存在磁盘上的任何位置

对此的任何帮助将不胜感激。


慕的地6264312
浏览 262回答 3
3回答

繁花如伊

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

相关分类

Go