http协议301、302的原理和实现


301返回码:永久重定向(Permanently Moved)

302返回码 :暂时重定向(Temporarily Moved)

实现301、302的重定向其实就是通过对http协议location的修改

用php的header函数去实现这个请求

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.baidu.com/");
?>


可以看到我做个301永久重定向到baidu首页。

如果代码是这样呢?

<?php
header("Location: http://www.baidu.com/");
?>

少了服务器端的永久定向设置,就变成302的临时跳转了

发现如果php在header函数实现重定向方法时,不标明返回码为301默认是302暂时性重定向。

以上是在应用程序上实现301或者302跳转,明白了301、302重定向的原理是对http报文的location进行修改,但是我们一般都是在web服务器上去做。nginx有一个location指令,它是不是可以修改http报文的location进行重新定义呢?

首先对一个静态页面访问,查看请求的头部信息

wKioL1Nwt1bip3PDAADbIpSXJhA101.jpg

返回码是200,并没有之前的请求报文的location标签信息

那么在nginx.conf配置文件里增加一段配置,意思是当请求以html结尾的文件重定向到对应的以php结尾的文件,也就是请求index.html重定向对应到index.php上


平滑重新启动nginx服务,再请求刚才的url,返回码为301,header头部信息里增加了location信息,指明了被重新定向到index.php上


这就是nginx如何实现301的,nginx实现302重定向,只要把permanent改成redirect即可


平滑重新启动nginx服务,http的头部信息里面变成了302重定向


注意避免301跳转的死循环,以下我同时在nginx和应用程序上实现了301,也就是从html跳转到php,然后又从php跳回html页面,出现这种情况chrome浏览器会出现这种提示

wKiom1NwvNHQPescAADgBXym4rk691.jpg

如果下次遇到这种问题,可能是出现重定向的死循环了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值