Http协议之301,302和307

Http协议是有状态码的,比较熟悉的状态码是200,代表链接OK,还有404和403,一个是not found,另一个是forbidden。Not found不用多说,可能是地址栏输入有误,或者是网页已经被移动。Forbidden的原因有很多,有可能是IP被服务器拉入黑名单,有可能是IP过分密集的访问该网站,被网站防火墙屏蔽,有可能是域名解析到了空间,但是空间没有绑定域名,也有可能是网页脚本文件在当前目录下没有执行权限。

上面说的都是2字头和4字头的状态码,但是比较关键的是3字头的状态码---301、302。

先写一个PHP,PHP的内容是指定使用301的方式,重定向到百度,然后在浏览器的地址栏上输入这个PHP的文件地址之后,就会蹦出百度的界面,查看其状态就是301,如图:

301的意思是“永久性重定向别的URL”,302的意思是“临时性的重定向”。使用302的方法的话,重复上面的实验,会看到状态码是302,而且回复头信息会多一个location: www.baidu.com,就是代表重定向的目的地是百度这个网址。

比如说有一个页面,是注册用户页面,需要输入账号、密码、手机号、电子邮箱和验证码这五个信息。在用户输入完以上的信息之后,页面会有一个跳转,提示“注册成功”或者“注册失败”,这个几秒钟的跳转也是重定向,如果成功了就会从这个短暂的界面重定向到正式登陆成功的界面,同时用户的数据就会被记录到后台的数据库里,保存到服务器里。

但是要知道,在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。

时间: 2024-10-01 07:38:49

Http协议之301,302和307的相关文章

HTTP 的重定向301,302,303,307(转)

HTTP 的重定向301,302,303,307(转) (2012-12-11 11:55:04) 转载▼ 标签: 杂谈 分类: 网络 301 永久重定向,告诉客户端以后应从新地址访问.302 作为HTTP1.0的标准,以前叫做Moved Temporarily ,现在叫Found. 现在使用只是为了兼容性的处理,包括PHP的默认Location重定向用的也是302.但是HTTP 1.1 有303 和307作为详细的补充,其实是对302的细化303:对于POST请求,它表示请求已经被处理,客户端

301,302,303,307重定向区别

规范中: 301是永久重定向,之后的请求中客户端应该使用新的URI(即,可以被浏览器缓存),对于POST/PUT/DELETE请求 客户端不应该自动的重定向 302是由于未知原因重定向,之后的请求中客户端不应该用新的URI,对于POST/PUT/DELETE请求 客户端不应该自动重定向 303是由于未知原因重定向,之后的请求中客户端不应该用新的URI,对于POST/PUT/DELETE请求 客户端应该使用GET请求来替代 307是临时重定向,之后资源可能会回到这个位置,之后的请求中客户端应该使用

301 302 304

301,302不同之处301 redirect: 301 代表永久性转移(Permanently Moved)    请求一次后,服务器告诉客户端浏览器,永久重定向,下次再请求网页时不再请求远端服务器,客户端浏览器缓存了重定向的目标地址,但是,如果浏览器清空缓存后,浏览器重定向将失效,需要再次请求服务器. 302 redirect: 302 代表暂时性转移(Temporarily Moved )     每次客户端浏览器都需要请求服务器,服务器返回302,客户端浏览器,再根据响应头,请求相应的U

301/302的区别 python魔法语法

重定向301/302的区别 301主要应用场景是在域名跳转. 301重定向是永久的重定向,搜索引擎在抓取新的内容的统统是也将旧的网址替换为了重定向之后的网址. 302主要应用场景:比如:未登录的用户访问用户中心时重新定向到登录页面. 302重定向只是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回302,所以,搜索引擎认为新的网址是暂时的 魔法语法 在这里列举取值.赋值.with的方法 对象['xx'] 取值,会触发哪个方法 __getattr__,在取值时如果对象中没有这个值

http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码

http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换. 2xx(成功) 表示成功处理了请求的状态码. 200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件. 201(

HTTP常见状态码 200 301 302 404 500

HTTP状态码(HTTP Status Code) 一些常见的状态码为: 一.1开头 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码.代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换. 二.2开头 2xx (成功)表示成功处理了请求的状态代码.代码 说明 200 (成功) 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 2

转载 HTTP常见状态码分析 200 301 302 404 500

转载原地址:  http://www.cnblogs.com/starof/p/5035119.html HTTP状态码(HTTP Status Code) 一些常见的状态码为: 一.1开头1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码.代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换.二.2开头2xx (成功)表示成功处理了请求的状态代

HTTP 状态码 301 302

301 Moved Permanently被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一.如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址.除非额外指定,否则这个响应也是可缓存的.新的永久性的URI应当在响应的Location域中返回.除非这是一个HEAD请求,否则响应的实体中应当包含指向新的URI的超链接及简短说明.如果这不是一个GET或者HEAD请求,因此浏览器禁止自动进行重定向,除非得到用户的确认,因为请求

HTTP状态码302,303,307间的那些事

<HTTP权威指南>第3章在讲解30X状态码时,完全没有讲清楚为什么要有302.303.307,以及他们的关系,一句“问题出在HTTP/1/1”让我一头雾水,莫名其妙.所以在网上收集到了这篇资源,mark. 一.状态码——302 RFC1945(http://tools.ietf.org/html/rfc1945#page-34),也就是HTTP1.0在介绍302时说,如果客户端发出POST请求后,收到服务端的302状态码,那么不能自动的向新的URI发送重复请求,必须跟用户确认是否该重发,因为