2 回答

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

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