Nginx http重定向到https时,post请求变为get的问题
上面说的都是2字头和4字头的状态码,但是比较关键的是3字头的状态码---301、302。
先写一个PHP,PHP的内容是指定使用301的方式,重定向到百度,然后在浏览器的地址栏上输入这个PHP的文件地址之后,就会蹦出百度的界面,查看其状态就是301,如图:

301的意思是“永久性重定向别的URL”,302的意思是“临时性的重定向”。使用302的方法的话,重复上面的实验,会看到状态码是302,而且回复头信息会多一个location: www.baidu.com,就是代表重定向的目的地是百度这个网址。
这里说的“永久重定向”和“临时重定向”并不是那种时间上的“永久和临时”,不是说采用了临时重定向,再关机或者重启之后,重定向的功能就消失了。比如使用搜索引擎搜索“网易”,需要在地址栏输入www.163.net,那么以后即使www.163.net的地址改变了,输入www.163.com服务器会自动链接到新地址www.wangyi.com,那么这时候使用301的话,就等于直接登陆www.wangyi.com,彻底忘记www.163.net的存在。如果是302的话,会先www.163.net,然后www.163.net的服务器返回信息给客户机,你真实需要去的是www.wangyi.com,然后客户机再去跟www.wangyi.com产生链接。
一般来说,最好使用301,这样更安全,而且省下了一步中间信息返回的步骤。
比如说有一个页面,是注册用户页面,需要输入账号、密码、手机号、电子邮箱和验证码这五个信息。在用户输入完以上的信息之后,页面会有一个跳转,提示“注册成功”或者“注册失败”,这个几秒钟的跳转也是重定向,如果成功了就会从这个短暂的界面重定向到正式登陆成功的界面,同时用户的数据就会被记录到后台的数据库里,保存到服务器里。
但是要知道,在PHP写法里使用301或者302的话,假设还是在上面的例子里,用户的信息在重定向的界面是没有被保存的,检查一下返回头信息会很轻松的发现,返回头信息开始的时候是POST,但是到了重定向的界面会变成GET。GET是获得,自然不会把信息存入数据库里,用户的信息录入等于白写。
举个例子:假设05.php是用户写注册信息的网页,用户填写完所有信息之后,系统重定向到06.php这个网页。如果这个重定向使用的是302 or 301,那么在06.php上,其实是没有任何的用户输入的信息的!如图:


302不用试了,把301抹去,默认就是302的方法,两个方法都是一样的效果,数据丢失。
这个时候怎么办?使用307,307就是在重定向中依旧保持原有的数据。
在上面的图里把301改成307,一切问题迎刃而解。而且可以看到,在05.php就是POST,在06.php里依旧还是POST。

转载自:http://blog.51cto.com/chenx1242/1747923
Nginx http重定向到https时,post请求变为get的问题的更多相关文章
- nginx 301跳转https后post请求失效问题解决
app本地请求是http端口,后来升级https强制301跳转,设置如下 server { listen 80; server name www.XXX.com; rewrite ^/(.*)$ ht ...
- nginx中实现把所有http的请求都重定向到https
在网站启用https之后,我们可能会有一个需求,就是将所有的http的请求自动地重定向到https, 如果前端是使用的nginx来实现的https,我们可以这样配置nginx的301重定向: serv ...
- node express将请求重定向为https
项目开发时,由于服务器只接受https请求(运维说了算...),所以在生产环境时,要把所有http请求全都重定向为https,具体操作是在app.js文件里加入以下代码: var express = ...
- nginx让所有的http地址重定向到https
问:为什么让所有的http都重定向到https呢?答:因为这样会使网站更安全些. 那么我是如何在nginx配置,让输入http://www.youcongtech.com或者youcongtech.c ...
- Nginx下HTTP强制重定向至HTTPS
Nginx下HTTP强制重定向至HTTPS 对于nginx来说,配置http强制重定向至https有多种多样的写法.可以直接rewrite,也可以用301重定向.但是直接拷贝网上的配置往往会出现问题, ...
- nginx开启ssl并把http重定向到https的两种方式
1 简介 Nginx是一个非常强大和流行的高性能Web服务器.本文讲解Nginx如何整合https并将http重定向到https. https相关文章如下: (1)Springboot整合https原 ...
- 如何配置Nginx,实现http访问重定向到https?
现在越来越多的网站,当我们输入域名时,会自动重定向到https,我们只需要简单修改下Nginx配置文件/usr/local/nginx/conf/nginx.conf(根据个人的实际存储路径)即可. ...
- nginx服务器http重定向到https的正确写法
http重定向到https使用了nginx的重定向命令.那么应该如何写重定向?之前老版本的nginx可能使用了以下类似的格式. rewrite ^/(.*)$ http://domain.com/$1 ...
- nginx将http升级到https并且同时支持http和https两种请求、http自动转向https
1.http升级到https 1.1.检查 Nginx 是否支持 SSL /usr/local/nginx/sbin/nginx -V configure arguments中是否有--with-ht ...
随机推荐
- py---------socketserver
同时两个客户端连接, server 不能有input server端根据client端的要求去执行固定的代码 server.py #-*- coding:utf-8 -*- import time i ...
- c/c++ socket发送http请求访问网站
这几天课比较少,校园网上网要认证才能上网,每次必须输入学号密码,为了方便,写了一个自动登录以及如果在线,登录自服务系统强制下线的小工具. 强制下线思路:获取sessionID----------> ...
- CentOS安装MySQL,(常规安装方式MySQL无法远程连接)
转载自:https://blog.csdn.net/z13615480737/article/details/78906598 CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ...
- MyEclipse8.5配置struts等框架
开发环境:MyEclipse8.5+Tomcat6.5+MySql5.5配置环境:Struts2+Spring2+Hibernate3.1 1.首先创建Java-Web Project工程,选择J2E ...
- Cause: java.sql.SQLException: 无法转换为内部表示(Mybatis)
公司开发档案系统使用框架:Spring+Struts2+Mybatis+EasyUI,在开发过程中出现sql异常:“Cause: java.sql.SQLException: 无法转换为内部表示”,错 ...
- <rhel6 mysql replication>
MySQL 支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务 ...
- java - Socket简单编程实践
1.简介: 1)SOCKET是应用程序和网络之间的一个接口.SOCKET创建设置好以后,应用程序可以: 通过网络把数据发送到socket . 通过网络从socket接收数据.(通信的前提是应用程序知道 ...
- 比例缩放 on() prop() 正则表达式
$('#banner-section').css('height',$(window).width() / 1900 * 490 ); $(window).resize(function(){ ...
- xaml实现无边框窗口
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/w ...
- sqlserver锁表、解锁、查看销表
锁定数据库的一个表 代码如下 复制代码 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 代码如下 复制代码 SELECT * FROM tab ...