首頁  >  文章  >  後端開發  >  golang 請求重定向問題(多餘的錯誤)

golang 請求重定向問題(多餘的錯誤)

王林
王林轉載
2024-02-15 10:30:091230瀏覽

golang 请求重定向问题(多余的错误)

在使用golang進行網路請求時,偶爾會遇到請求重定向的問題。這個問題可能是由於多餘的錯誤所導致的。 php小編西瓜為你解答如何解決這個問題,以確保網路請求的順利進行。讓我們一起來看看吧!

問題內容

我從 golang 中得到了一個非常奇怪的行為。

我想用發布請求做一些事情,然後重定向請求。 取決於隨機因素......它是否有效。

當它不起作用時,我收到該錯誤:

「http:多餘的回應。來自...的WriteHeader呼叫」

# 函數越深,重定向起作用的可能性就越小。

  • 據我所知,我只重定向一次(或零次...)
  • 在重定向之前我不會寫入標頭。
  • 在重定向之前我對 writer 所做的唯一一件事就是將其放入地圖中。

我不想在這裡複製所有程式碼,所以我會總結一下。

處理程序處理 POST 請求,在名為 demand 的對應中傳遞請求資料。

然後解析請求以取得表單值,並將其儲存到 demand 中 它被發送到通道中。

需求圖從通道傳遞到以下函數:

func answer_login(demand map[string]any) map[string]any {
    writer := demand["writer"].(http.ResponseWriter)
    request := demand["request"].(*http.Request)
    http.Redirect(writer, request, "/", 302) // <- if it is here it works (at95 %)
    // some mundane code (printing stuff, really)
    .
    .
    .
    // http.Redirect(writer, request, "/", 302) // <- if it is here it works (only at 20 %)
    ...

如果我按下 F5,它最終會正確重定向。 我嘗試簡單地在 writer.Write([]byte("same issues")) 中寫入一些內容,同樣的問題。

我在 Linux 上,嘗試了不同的瀏覽器。

問題:這是一個(已知)錯誤嗎?

有什麼解決辦法嗎?

(強制寫入客戶端)

謝謝

解決方法

我終於了解了這個問題並找到了解決方案。
問題:

因此,編寫器請求在與實際處理函數不同作用域的函數中進行處理和重定向。 以及當實際處理函數結束時。某些上下文因素使編寫者請求過期:您無法再重定向或回應該請求。 這是在文檔中寫的:

https://pkg.go.dev/net/http p>

#關於它有時起作用的一個可能的解釋是...也許「通道傳輸、處理和重定向」發生得足夠快(有時)並且實際處理程序功能尚未關閉。

在處理資料之前阻止處理程序函數會破壞並行非同步處理的目的。 所以我最終將所有內容嵌套在處理程序函數中。
歡迎聰明的人糾正我或分享關於上下文和 ResponseWriters 的更好的解釋。

以上是golang 請求重定向問題(多餘的錯誤)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除