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 上的函数/接口链,查看提供的文件是否缓存在磁盘上的任何位置
对此的任何帮助将不胜感激。
繁花如伊
相关分类