i'm new to go, and i'm trying to do a redirect after login.
for the router, i'm using Mux:
router.HandleFunc("/login", pages.Login).Methods("POST")
and the Login func contains these lines:
if errorFlag {
http.Redirect(rw, rq, "/", http.StatusNotAcceptable)
} else {
http.Redirect(rw, rq, "/", http.StatusOK)
}
thing is, i'm getting the correct status according to the errorFlag, but the page is not redirected! the headers also seem to be set correctly ("Location:/") but instead of redirecting, the page just stays blank and remains under "/login"
i've tested it on Chrome & FF.
these are the response headers:
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
anyone every encountered this before?
Update
As suggested below, this change works:
if errorFlag {
http.Redirect(rw, rq, "/", http.StatusTemporaryRedirect)
} else {
http.Redirect(rw, rq, "/", http.StatusFound)
}
thanks!
Use a 3xx status code to redirect the client (http.StatusFound, http.StatusMovedPermanently, http.StatusSeeOther, ...). The Location header is not sufficient to cause a redirect.
You are trying to redirect POST method so neither 301 (StatusMovedPermanently) nor 302 (StatusFound) should work according to W3.org.
Try returning 303 (StatusSeeOther) if you want to redirect with GET method. Try returning status 307 (StatusTemporaryRedirect) if you want to redirect with the same method as in the request.
Details here: https://softwareengineering.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect