php小編柚子在這篇文章中將為大家解答一個常見問題:「為什麼我的Postman 和nginX 中的502 上的套接字掛起,而Gin- Gonic 在這兩種情況下都會回傳StatusOk?」這個問題牽涉到不同的網路框架和伺服器的行為差異,我們將分析其中的原因並給出解決方案,幫助讀者解決類似的問題。
為了簡化我的問題,我有一條很長的路線,可能需要長達 2 分鐘才能回傳回應。現在這是我的範例 http 處理程序:
func GetHealth(svc *service.Hotel) gin.HandlerFunc { return func(c *gin.Context) { time.Sleep(30 * time.Second) c.JSON(200, gin.H{}) } }
現在,當我呼叫[GET] /health
路由郵差回傳Error: 套接字掛起
在從gin-gonic 回傳回應的確切時間,記錄了200 Ok
:
[GIN] 2024/01/24 - 11:10:58 | 200 | 200 30.084587215s | ::1 |取得「/health」
現在,在 nginX 後面作為反向代理的同一個項目,當我的服務記錄了 200 Ok
時,我在 API 回應上收到 502 nginX 錯誤。
問題是為什麼我在 gin-gonic 已成功回傳回應的情況下在客戶端收到錯誤?我該如何解決這個問題?
我使用了 github.com/gin-contrib/timeout
函式庫,因為我認為它與路由逾時有關,但沒有成功。
在gin-gonic
中,您可以在http.Server
上設定WriteTimeout
以防止socket 掛起
或nginx 502。
有趣的是,即使逾時,它總是記錄 200,但客戶端會收到錯誤:
srv := &http.Server{ Addr: ":9000", // Good practice to set timeouts to avoid Slowloris attacks. WriteTimeout: time.Second * 120, // THIS TIMEOUT NEEDS TO BE SET ReadTimeout: time.Second * 15, IdleTimeout: time.Second * 60, Handler: router, }
以上是為什麼我的 Postman 和 nginX 中的 502 上的套接字掛起,而 Gin-Gonic 在這兩種情況下都會返回 StatusOk?的詳細內容。更多資訊請關注PHP中文網其他相關文章!