亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與官方 Docker 鏡像相比,Go Mime 包(1.14)在本地表現不同

與官方 Docker 鏡像相比,Go Mime 包(1.14)在本地表現不同

Go
飲歌長嘯 2022-05-23 15:13:31
我已經將我的本地 Go 版本從 升級1.13到1.14,然后我通過重新初始化使用go mod.本地:$ go versiongo version go1.14 linux/amd64go.mod我的項目:module example-projectgo 1.14mimeGo 1.14中的包中有一個更新,將.js文件的默認類型從 更改application/javascript為text/javascript.我有一個應用程序,它提供一個包含 JavaScript 文件的文件夾,例如:func main() {    http.HandleFunc("/static/", StaticHandler)    http.ListenAndServe(":3000", nil)}func StaticHandler(w http.ResponseWriter, r *http.Request) {    fs := http.StripPrefix("/static", http.FileServer(http.Dir("public/")))    fs.ServeHTTP(w, r)}我更新了一個測試用例以反映 Go 1.14 中的 mime 更改:func TestStaticHandlerServeJS(t *testing.T) {    req, err := http.NewRequest("GET", "/static/index.js", nil)    if err != nil {        t.Fatal(err)    }    rr := httptest.NewRecorder()    handler := http.HandlerFunc(StaticHandler)    handler.ServeHTTP(rr, req)    if status := rr.Code; status != http.StatusOK {        t.Errorf("handler returned wrong status code: got %v want %v",            status, http.StatusOK)    }    expected := "text/javascript; charset=utf-8"    if rr.Header().Get("Content-Type") != expected {        t.Errorf("handler returned unexpected Content-Type: got %v want %v",            rr.Header().Get("Content-Type"), expected)    }}當我在本地運行它時,檢查 Content-Type 的測試用例失?。篢estStaticHandlerServeJS: main_test.go:27: handler returned unexpected Content-Type: got application/javascript want text/javascript; charset=utf-8我還可以在瀏覽器中確認該文件確實是使用 Mime 類型“application/javascript”提供的,就像它在 Go 1.13 中一樣。當我使用官方鏡像在 Docker 容器上運行這個測試時golang:1.14.0-alpine3.11,這個測試通過了,它反映了mime包的變化行為。因此,我留下了一個在本地失敗并通過容器的測試用例。我只在本地維護了一個 Go 版本,1.14就像我上面展示的那樣。mime我的本地 Go 安裝程序的包行為不同的原因可能是什么?
查看完整描述

1 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

這對我來說也很有趣,我也有和你一樣的行為 - go 1.14 在我的 mashine (macOs catalina) 應用程序/javascript 上交付,而不是 text/javascript。我調試了程序,在 mime 包的 type.go 中發現了這個函數:


func initMime() {

    if fn := testInitMime; fn != nil {

        fn()

    } else {

        setMimeTypes(builtinTypesLower, builtinTypesLower)

        osInitMime()

    }

}

else 塊中正在發生有趣的事情。在將擴展分配給的 builtInTypes 設置后,將文件擴展js分配給text/javascript操作系統特定的內容類型,這會覆蓋內置分配。在 mac 上,它將文件 type_unix.go where files


"/etc/mime.types",

"/etc/apache2/mime.types",

"/etc/apache/mime.types",

經測試可用,在我的情況下/etc/apache2/mime.types,操作系統中存在一個文件,它包含...令人驚訝的一行 application/javascript js 并且此行覆蓋了 .js 擴展的 go 內置定義,并導致Content-Type: application/javascript交付給客戶端并導致您的測試失敗。


查看完整回答
反對 回復 2022-05-23
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號