http.Redirect无效

时间:2016-01-14 16:46:34

标签: http go header

我是新手,我正在尝试登录后进行重定向。

对于路由器,我正在使用Mux:

router.HandleFunc("/login", pages.Login).Methods("POST")

并且登录功能包含以下行:

if errorFlag {
    http.Redirect(rw, rq, "/", http.StatusNotAcceptable)
} else {
    http.Redirect(rw, rq, "/", http.StatusOK)
}

事情是,我根据errorFlag得到了正确的状态,但页面没有被重定向!标题似乎也设置正确(“位置:/”) 但不是重定向,页面只是保持空白并保持在“/ login”

我在Chrome& FF。

这些是响应标题:

Content-Length:0
Content-Type:text/plain; charset=utf-8
Date:Thu, 14 Jan 2016 16:52:34 GMT
Location:localhost:8000/
Set-Cookie:user=MTQ1Mjc5MDM1N...; Path=/; Expires=Sat, 13 Feb 2016 16:52:34 UTC; Max-Age=2592000

以前遇到过这个的人?

更新

如下所述,此更改有效:

if errorFlag {
    http.Redirect(rw, rq, "/", http.StatusTemporaryRedirect)
} else {
    http.Redirect(rw, rq, "/", http.StatusFound)
}

谢谢!

2 个答案:

答案 0 :(得分:2)

使用3xx状态代码重定向客户端(http.StatusFoundhttp.StatusMovedPermanently,http.StatusSeeOther,...)。 Location标头不足以导致重定向。

答案 1 :(得分:1)

您正在尝试重定向POST方法,因此根据W3.org,301(StatusMovedPermanently)和302(StatusFound)都不应该正常工作。

如果要使用GET方法重定向,请尝试返回303(StatusSeeOther)。如果要使用与请求中相同的方法重定向,请尝试返回状态307(StatusTemporaryRedirect)。

详细信息:https://softwareengineering.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect