我無(wú)法訪問(wèn)后端服務(wù)器提供的自定義響應(yīng)標(biāo)頭。服務(wù)器是用 Go 編寫(xiě)的。我正在嘗試使用 axios 作為我的 HTTP 客戶端來(lái)訪問(wèn)它。我可以在 chrome 開(kāi)發(fā)工具控制臺(tái)中看到標(biāo)頭,但無(wú)法通過(guò) axios 訪問(wèn)標(biāo)頭。Chrome 開(kāi)發(fā)工具響應(yīng)標(biāo)頭。我希望獲得底部的 x-***-token我可以通過(guò) axios 訪問(wèn)的標(biāo)頭(啟用 cors)但是,當(dāng)我在禁用 cors 的情況下運(yùn)行 chrome 時(shí),我可以通過(guò) axios 訪問(wèn)標(biāo)頭:open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security我可以通過(guò) axios 訪問(wèn)的標(biāo)頭(cors 已禁用)這告訴我這不是 axios 的問(wèn)題,而是我的標(biāo)頭配置的問(wèn)題。以下是我們?nèi)绾闻渲脴?biāo)頭,我正在嘗試訪問(wèn)x-custom-token標(biāo)頭:func allowCORS(h http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if origin := r.Header.Get("Origin"); origin != "" && contains(cors, origin) { w.Header().Set("Access-Control-Allow-Origin", origin) } if contains(cors, "*") { w.Header().Set("Access-Control-Allow-Origin", "*") } if r.Method == "OPTIONS" || r.Method == "GET" && r.Header.Get("Access-Control-Request-Method") != "" && w.Header().Get("Access-Control-Allow-Origin") != "" { headers := []string{"Content-Type", "Accept-Encoding", "X-CSRF-Token", "Authorization", "accept", "origin", "Cache-Control", "X-Requested-With", "x-custom-token"} w.Header().Set("Access-Control-Allow-Headers", strings.Join(headers, ",")) methods := []string{"GET", "HEAD", "POST", "PUT", "DELETE"} w.Header().Set("Access-Control-Allow-Methods", strings.Join(methods, ",")) expose := []string{"x-custom-token"} w.Header().Set("Access-Control-Expose-Headers", strings.Join(expose, ",")) return } h.ServeHTTP(w, r)})}誰(shuí)能告訴我我設(shè)置的標(biāo)題不正確嗎?
1 回答

躍然一笑
TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的問(wèn)題是您僅針對(duì) OPTIONS 請(qǐng)求公開(kāi)。
在您的 if 語(yǔ)句中,您的標(biāo)準(zhǔn)之一是r.Header.Get("Access-Control-Request-Method") != ""
.
此標(biāo)頭通常僅在飛行前請(qǐng)求中使用,因此您的公開(kāi)標(biāo)頭不會(huì)寫(xiě)入 GET 或其他方法。
此外,您的語(yǔ)句在寫(xiě)入標(biāo)題后返回。這對(duì)于飛行前是正確的,但會(huì)導(dǎo)致其他方法無(wú)法發(fā)送任何內(nèi)容。
解決方案 - 調(diào)整邏輯以將公開(kāi)標(biāo)頭與飛行前標(biāo)頭分開(kāi)處理。
- 1 回答
- 0 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)
0/150
提交
取消