Redirect::back()
函數使用由客戶端(瀏覽器)指定的Referer
HTTP標頭中的URL。
你可以訪問此標頭值等r.Header.Get("Referer")
,但http.Request
類型還提供了直接的方法Request.Referer()
返回此Referer
字段,這也與它的2種可能的形式("Referer"
和"Referrer"
)交易的值。
這是你可以模仿「回去」的行爲:
func PostHandler(w http.ResponseWriter, r *http.Request) {
// Process form, then:
if rf := r.Referer(); rf != "" {
http.Redirect(w, r, rf, http.StatusSeeOther)
return
}
// No Referer specified, supply your own response
// or redirect to a default/home page
http.Redirect(w, r, "/", http.StatusSeeOther)
}
如果你想從衆多處理器調用此,您可以在輔助函數捕獲此功能:
func redirectBack(w http.ResponseWriter, r *http.Request) {
if rf := r.Referer(); rf != "" {
http.Redirect(w, r, rf, http.StatusSeeOther)
return
}
// No Referer specified, supply your own response
// or redirect to a default/home page
http.Redirect(w, r, "/", http.StatusSeeOther)
}
然後使用它:
func PostHandler(w http.ResponseWriter, r *http.Request) {
// Process form, then:
redirectBack(w, r)
}
真棒的答案。這也導致了我的'Request''Referer()'方法,它允許編譯器檢查Referer的錯誤拼寫。 –
@PaulParker你說得對,使用['Request.Referer()'](https://golang.org/pkg/net/http/#Request.Referer)更好。我會編輯。 – icza