3xx 重定向

3xx系列是http响应包中重要的状态标准,表示重定向意义的一类状态码,这些转状态码将指导客户端执行某些行为

都是属于重定向,但不同的值,差异却不小,具体差异如下

  • 301 永久重定向 Moved Permanently
  • 302 临时重定向 Found
  • 303 临时重定向 See Other
  • 304 未修改 Not Modified
  • 305 使用代理 Use Proxy
  • 306 已废弃
  • 307 临时重定向 Temporary Redirect

永久重定向

永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后
应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI
保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存

上面说,301是告诉客户端,资源不在我这了,你去我给你的uri那找,来,写个简单的web服务看下

 var express = require('express');var app = express();app.get('/', function(req, res){console.log('test')res.send('hello 小喽喽')//   res.redirect(301,'https://www.baidu.com');});app.listen(3000);

首次访问是正常响应 200 ok ,然后我们改下代码

 var express = require('express');var app = express();app.get('/', function(req, res){console.log('test1')   res.redirect(301,'/123');});app.get('/123', function(req, res){console.log('test2')res.send('hello 小喽喽方法')});app.listen(3000);

再次访问,301,多刷几次,依然301,和首次访问不通的是,响应是从本地磁盘缓存中返回的,耗时也减少了,301除了告诉客户端资源转移以外,还希望客户端缓存资源,浏览器遵守http规范,所以就缓存了

临时重定向

302 ,303,307 都是临时重定向,那有啥区别呢

302意思是Found,表示临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望客户端(本次)能使用新的 URI 访问,新的临时性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新的URI的超链接及简短说明。如果这不是一个GET或者HEAD请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。

但是很多现存的浏览器将302响应视作为303响应,并且使用GET方式访问在Location中规定的URI,而无视原先请求的方法。因此状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。

跟路由改为post,用postman访问看下

 var express = require('express');var app = express();app.post('/', function(req, res){console.log('test1')   res.redirect(302,'/123');});app.get('/123', function(req, res){console.log('test2')res.send('hello 小喽喽方法')});app.listen(3000);

如下图,访问成功,也没有提示,说明postman也默认不执行302的http禁止指令

改下postman配置,让它听http的话,可以看到,并没有重定向到get方法

303 See Other 该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源,如下图,可以正常访问到资源

307 Temporary Redirect
临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况
代码改为307重定向,看下postman,还是很听话的

304 Not Modified

该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系

我用postman访问的时候,可以看到postman对304的执行是多次重试,最后白屏

而勾选上自动重定向后,正常访问,这也再次说明,浏览器对http协议指令的执行力存在差异的情况

305 Use Proxy

被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。

总结

写这篇的原因是因为做短链的时候讨论到这个问题,短链重定向,301默认缓存,302,默认不缓存,考虑到减少服务器压力,应该选择301重定向,但301无法统计链接点击来源,302则可以,为业务考虑,选择302重定向,顺便撸一遍3xx的码

参考文献

http状态码大全:https://www.php.cn/web/web-http300.html
《图解http》

偶尔撸点文章,姑且看看,关注可送各种技术资源,不用加好友的那种送

http协议状态码3xx系列(301,302,303,304,305,306,307),小白易通相关推荐

  1. 详解重定向(HTTP状态码301/302/303/307/308)附案例

    关注 前端瓶子君,回复"交流" 加入我们一起学习,天天进步 今天打算好好把状态码301.302.303.307.308好好撸一遍,并会测试下一些例子. 状态码的解释 我们都知道重定 ...

  2. http协议状态码和web错误解决总结

    HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为:  200 – 服务器成功返回网 ...

  3. HTTP协议状态码详解(HTTP Status Code)

    HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 ...

  4. HTTP协议状态码详解(HTTP Status Code)(转)

    原文链接:HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为:  200 – 服务器 ...

  5. (chap4 Http状态码) 3XX重定向

    3XX响应结果表明浏览器要执行某些特殊的梳理以正确处理请求. 301 Moved Permanently 永久重定向.该状态码表示请求的资源已经被重新分配了新的URI,以后应该使用资源现在所指的URI ...

  6. HTTP协议状态码的含义

    HTTP协议状态码的含义 号码含义 ----------------------------------------- "100":Continue "101" ...

  7. 二十、HTTP 协议状态码-5XX

    HTTP 协议状态码-5XX 5XX 指的是请求出错了,而且很有可能是服务端侧的异常.下面定义的状态码有时候也只能反应一个大概情况,而不一定确切的,主要是协助用户排查问题. 500 Internal ...

  8. 常见HTTP状态码(200、301、302、500等)

    HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码,状态码的第一个数字代表了响应的五种状态之一. 1XX系列:指定客户端应相应的某些动作,代表请求已被接受,需要继续处理.由于 HTT ...

  9. 常见HTTP状态码(200、301、302、500等)解说

    对网站管理工作者来说有个词不陌生,HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码.状态码的第一个数字代表了响应的五种状态之一. 1XX系列:指定客户端应相应的某些动作,代表请求已 ...

最新文章

  1. eclipse Hibernate
  2. FileZilla无法连接到服务器,不安全的服务器,不支持 FTP over TLS的解决方案
  3. Mysql多实例配置文档
  4. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建--转载
  5. Web API 简单示例
  6. tcp option 结构体_基于 Kotlin 实现一个简单的 TCP 自定义协议
  7. 使用SALT-API进入集成开发的简单样例
  8. linux目录规范及简单说明
  9. Faster R-CNN——学习笔记~
  10. 一种编程范式:对拍编程
  11. Vue的mergeOptions函数分析-下
  12. PowerShell在Exchange2010下快速开启邮箱[续]
  13. php前端代码隐藏,php – Yii2 htaccess – 如何隐藏前端/ web和后台/ web完全
  14. 南阳理工ACM111
  15. 1000以内完数c语言程序_c语言完数(c语言输出1到1000所有完数)
  16. uniapp 让支付触手可及,封装了微信支付、QQ支付、支付宝支付、京东支付、银联支付常用的支付方式以及各种常用的接口
  17. 对皮尔逊相关系数进行假设检验
  18. ssd网络结构简单说明
  19. ArcMap对多年 NDVI 进行线性趋势和F显著性检验
  20. 省-市-区三级联动选择地址 + 地图定位(高德api定位获取位置信息),互相联动显示

热门文章

  1. Anaconda > Windows+Anaconda迁移到另一个硬盘
  2. 《智慧书》格言11¬20
  3. mysql 5.6 启用utf8mb4
  4. 年末大清仓,用Python绘制饼状图对商品库存进行分析
  5. HTML5 draggable 拖拽实例
  6. 【SQL Server】性能优化-索引
  7. 下雨了【老婆的日记】
  8. 时空智友采购流程涉及表
  9. github,源码,高仿 直播
  10. c/c++ windows ble 蓝牙