2 回答

TA貢獻1788條經(jīng)驗 獲得超4個贊
我理解你想要做什么,但你的問題非常具有誤導(dǎo)性。正如許多人所提到的,您無法訪問先前發(fā)出的響應(yīng)代碼作為重定向的結(jié)果執(zhí)行的請求(不是因為 Go 沒有提供它,而是 HTTP 沒有按照您想要的方式處理您的場景)。原始請求和重定向請求是在您的應(yīng)用程序中兩個不同時間發(fā)生的兩個單獨的 HTTP 請求。這意味著如果全新請求和重定向請求完全相同,您就無法輕松區(qū)分它們。
我的腦海中浮現(xiàn)出以下解決方案:
發(fā)送 307 響應(yīng)代碼時,您應(yīng)該在
Location
標頭中提供新的 URI 。您可以選擇不同的 URL 路徑,因此可以將其路由到單獨的處理程序(僅處理重定向的請求)。其他選項是使用相同的路徑,但添加一個參數(shù),例如附加&redirected=1
到 URL - 通過解析參數(shù),您可以檢測新的和重定向的請求。如果可能,對重定向請求使用 GET 而不是 POST。如果 POST 數(shù)據(jù)對于第二個請求是必不可少的,您需要以某種方式從數(shù)據(jù)庫或您存儲原始 POST 內(nèi)容的任何地方獲取它。根據(jù)我的理解,使用代碼 302 而不是 307 會要求客戶端始終使用 GET 方法進行重定向。然后,您可以使用
Request.Method
區(qū)分新請求和重定向請求。保持應(yīng)用程序中的狀態(tài)并跟蹤已經(jīng)發(fā)布的內(nèi)容。這將需要每個請求的唯一標識符 - 如果您擁有并存儲它,則可以檢查請求是全新的還是之前執(zhí)行過的(假設(shè)重定向)。

TA貢獻1802條經(jīng)驗 獲得超6個贊
你的問題是這樣的:
我將如何獲得 307 狀態(tài)代碼,以決定是否重定向
您正在嘗試決定是否需要在 HTTP請求處理程序中重定向。在請求處理程序中,您不會收到狀態(tài)代碼,而是將狀態(tài)代碼作為響應(yīng)的一部分發(fā)送。
- 2 回答
- 0 關(guān)注
- 178 瀏覽
添加回答
舉報