在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