Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nginx loses POST variable with http -> https redirect

I have a website set up that uses the redirect method...

server {
    listen 80;
    server_name example.org;
    return 301 https://$server_name$request_uri;
}

However when a page is posted to "http://example.com" it redirects to "https://example.com" and in the process, it strips the POST.

I recognize this is how it works, however I need to somehow do one of the following...

  • Do a redirect from http -> https while keeping the POST variable intact
  • Convert the POST variable to a GET variable during the redirect (which would work fine)
  • Redirect everything EXCEPT for one folder

Any suggestions? I'm a bit lost...

like image 725
Jonathan Coe Avatar asked Sep 01 '16 20:09

Jonathan Coe


2 Answers

If you are willing to forgo the "permanent" redirect status, I believe a 307 redirect instead of a 301 will preserve the POST. There actually is a redirect that is permanent and preserves the post, a 308, but it isn't well adopted yet by browsers and other user agents.

like image 56
vcsjones Avatar answered Oct 18 '22 11:10

vcsjones


A 308 redirect is a fix, but the solution is to POST directly to https:

  • by posting to http, your post data are not secure
  • the redirect make the process slower
  • if you post to http from an https webpage, browser may display a warning to the user
like image 41
Tom Avatar answered Oct 18 '22 13:10

Tom