跳转到内容
aswind7
GitHub
Blog

HTTP与常用状态码

各大版本的区别

HTTP 1.0

  • 缓存头 主要用Expires
  • 每次请求都要建立tcp链接

HTTP 1.1

  • 缓存头 新增 Cache Control、Etag等
  • 新增断点续传功能: 206(Partial Content);请求头range头
  • 支持长连接并默认开启,Connection: keep-alive,一个TCP传递多个HTTP请求和响应;

缺点:

  • 单个 TCP 连接在同一时刻只能处理一个请求;开启Pipelining功能后可以在一个连接中发送多个请求,但必须是有序的;
  • 连接数过多。我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器对同域名发起的tcp的最大请求数为6,也就是服务器能承载的最高并发为50,当第51个人访问时,就需要等待前面某个请求处理完成。

HTTP 2.0

  • 支持以二进制分帧的形式进行传递
  • 多路复用(每个TCP连接上有多个request, 可以混杂在一起,不同的request会有不同的id,便于服务器端识别; 同域名下的多个请求可复用在同一个tcp连接上面)
  • 使用encoder进行header压缩
  • 服务端推送

状态码

1 表示消息 2 表示成功 3 表示重定向 4 表示请求错误 5 表示服务器错误

1xx

101 服务器基于客户端来切换协议,实际应用: 交易所的ws连接传输内容

2xx

200 ok

204 成功但未返回内容

206 成功处理部分请求; 实际应用: 1.大文件下载的断点续传 2.视频播放/传输

有个重要的点是 响应头会有 Content-Range: bytes 500-999999/2000000 标识(可以随意打开一个b站视频看network,它就是基于这个实现的)

3xx

301 永久移动

302 临时移动 (302 Found 资源存在但改变了位置)

304 Not Modified (协商缓存用)

307 (307 Temporary Redirect 307 Internal Redirect; 前者是标准状态码,后者是非标的应该是Nginx那层做重定向时候加的; 307是基于302状态码增加: 不允许重定向POST到GET)

303(允许任意请求到 GET 的重定向,由于浏览器对302滥用重定向,所以规范用303来支持了这一点)

308状态码(它是基于301状态码增加: 不允许浏览器将原本为 POST 的请求重定向到 GET 请求上)

如何重定向: 基于响应头的Header 的 Location 字段

状态码释义能不能被浏览器改变请求方法SEO影响HTTP协议版本
301原资源不可访问,永久移动到新URI能改变抓取新内容,保存新网址HTTP1.0
302旧资源还在,暂时访问新的URI能改变 (通常POST 到 GET)抓取新内容,保存旧网址HTTP1.0
307同302;不能改变同302;HTTP1.1

实例: HTTP重定向到HTTPS这个环节, 谷歌、淘宝、知乎等都使用了307重定向;

知乎专栏的307重定向 (307 Internal Redirect)

知乎专栏的307重定向 (307 Internal Redirect)

谷歌首页的307重定向 (307 Internal Redirect)

谷歌首页的307重定向 (307 Internal Redirect)

4xx

400 客户端请求错误

401 未认证

403 禁止访问,比如外网访问内网域名

404 找不到

5xx

500 服务器错误

502 网关错误

503 服务不可用, 通常是服务挂了

504 网关超时

相关文章

https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/14#issuecomment-465547222
https://juejin.cn/post/6844903489596833800#comment 1 1.1 和 2 区别
https://zhuanlan.zhihu.com/p/61423830 你猜一个 TCP 连接上面能发多少个 HTTP 请求 https://zhuanlan.zhihu.com/p/43789231 彻底搞懂HTTPS的加密原理
https://zhuanlan.zhihu.com/p/128000072 万字长文,一文搞懂TCP、IP和HTTP、HTTPS
https://github.com/febobo/web-interview/issues/144 面试官:说说HTTP 常见的状态码有哪些,适用场景?
https://zhuanlan.zhihu.com/p/60669395 HTTP 中的 301、302、303、307、308 响应状态码

Tags: