http协议版本
-
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。
-
HTTP支持持久连接,在HTTP / 0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP / 1.1中,引入了保持活动机制,其中连接可以重用于多个请求。
-
可分为五个版本,分别是0.9、1.0、1.1、2、3。
版本差异
1.1 HTTP/0.9
-
只有一个命令GET。
-
服务器只能回应HTML格式的字符串。
-
服务器发送完毕,就关闭TCP连接。
1.2 HTTP/1.0
-
除了GET,还引入了POST和HEAD方法
-
不仅可以传输文字,还能传输图像、视频、二进制文件。
-
每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
TCP连接的新建成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢(slow start)。所以,HTTP 1.0版本的性能比较差。随着网页加载的外部资源越来越多,这个问题就愈发突出了。
1.3 HTTP/1.1
-
引入了持久连接(persistent connection)keep-alive,即TCP连接默认不关闭,可以被多个请求复用。
-
支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
-
提供身份认证、状态管理和 Cache 缓存等机制相关的请求头和响应头
-
新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 。
1.4 HTTP/2
-
基于 HTTPS 的,所以 HTTP/2 的安全性高。
-
会压缩头(Header):如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。
-
头信息和数据体都是二进制,并且统称为帧(frame):头信
1.5 HTTP/3
HTTP/2 主要的问题在于,多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP。
状态码
状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
-
1xx:指示信息–表示请求已接收,继续处理
-
-
3xx:重定向–要完成请求必须进行更进一步的操作
-
4xx:客户端错误–请求有语法错误或请求无法实现
-
5xx:服务器端错误–服务器未能实现合法的请求
常见状态代码、状态描述、说明:
-
200 OK //客户端请求成功
-
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
-
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
-
403 Forbidden //服务器收到请求,但是拒绝提供服务
-
404 Not Found //请求资源不存在,eg:输入了错误的URL
-
500 Internal Server Error //服务器发生不可预期的错误(服务器内部错误)
-
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常