在go的核心中存在http包的问题。尽管响应正文中的Content-Length是正确的,但看起来文件内容已被缓存。这里演示的是我正在编写的应用程序的简化版本。http.FileServer缓存文件并在编辑后提供旧版本
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页面:
Hello there
检查响应:
<!doctype html>
<html>
<body>
<p>Hello there</p>
</body>
</html>
我执行的围棋程序,并在浏览器中访问http://localhost:8080
与呈现我可以看到以下内容:
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接口,看是否送达文件随时随地缓存在磁盘上
任何与此有关的帮助将非常感激。
您使用的网络浏览器或命令行工具? – Javier
感谢您的意见,请阅读评论。我用几个Web浏览器,命令行工具以及在Windows,Linux和Mac上运行go服务器来复制行为。 – onmylemon
我无法用这个版本'go version go1.2 darwin/amd64'重现问题。 – Javier