Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

http.Redirect not working

Tags:

http

header

go

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!

like image 535
Deano Avatar asked Oct 28 '25 21:10

Deano


2 Answers

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

like image 21
kopiczko Avatar answered Oct 30 '25 12:10

kopiczko



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!