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在浏览器中访问以显示:
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并重新加载页面。我得到以下内容:
<p>
Hello there everyone
再次查看响应标题
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- Lengthhttp.FileServer处理程序已更改以及最后修改的内容,但未更改该内容。即使关闭程序并执行此问题,也会发生go run src/.../main.go。到目前为止,我发现清除文件的明显缓存版本的唯一方法是重新启动运行程序的计算机。
Content- Length
go run src/.../main.go
我尝试了以下方法:
任何帮助,将不胜感激。
好的,所以在忽略问题并继续前进几个星期之后,我终于弄清了问题所在。
为了使我的主计算机完全不受定制,我使用Vagrant使用golang,nodejs和php开发应用程序。看来,在Virtual Box共享上运行go应用程序并在该共享上存储所有html文件都会导致此问题。
为了证明这一点,我打开了一个Vagrant框,将文件从/ vagrant共享目录复制到/ home / vagrant / testing /,然后复制了前面列出的所有操作。这使问题消失了。
因此,换句话说,不要使用Virtual Box共享文件夹托管打算在http.FileServer方法中使用的文件。