Http的1.0和1.1以及2.0的区别详解
Posted fesng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Http的1.0和1.1以及2.0的区别详解相关的知识,希望对你有一定的参考价值。
Http的1.0
问题1:短连接
http是基于Tcp协议的,由于是短连接,每个http的;连接和断开都会对应Tcp的3次握手,慢启动连接和四次挥手断开。(通过设置Connection: keep-alive可以解决)
问题2:阻塞
客户端同时发起的请求数目是固定的,如果太多就会排队阻塞。
Http 1.1的优化
优化1:长连接
一个Tcp连接通道可以并行多个http的请求和关闭。但是服务端还是客户端请求的先后顺序并且处理的。所以服务器依然会阻塞。
优化2:缓存优化
缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
优化3:错误通知的管理。
在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除
优化4:新增请求方式
PUT:请求服务器存储一个资源;
DELETE:请求服务器删除标识的资源;
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
CONNECT:保留将来使用
优化5:Host优化
新增Host优化,通过不同host可以支持服务一个Ip对应多个虚拟Host主机。
优化6:断点续传优化
引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
Http2.0的优化
优化1:完全多路复用
客户端和服务端可以并行发起或者回复,避免串行带来的阻塞。
优化2:报文压缩
更多的压缩算法和重复字段比如cookie的优化传输
优化3:二进制分帧
新增二进制分帧层。在http层和tcp之间,可以实现帧的乱序,同时在另一端组装。
优化4 :服务端推送
可以对客户端的一次请求,多次回复
请求实例和分析
// 请求
GET / HTTP/1.1
Host:xxx.xxxx.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2016042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Mon, 25 May 2016 03:19:18 GMT
//响应
HTTP/1.1 200 OK
Cache-Control: private, max-age=30
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 25 May 2016 03:20:33 GMT
Last-Modified: Mon, 25 May 2016 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 25 May 2016 03:20:02 GMT
Content-Length: 12173
状态码含义
HTTP 1.1状态代码及其含义
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
参考:
https://www.jianshu.com/p/52d86558ca57
https://www.debugger.wiki/article/html/1565502376358922
https://juejin.im/entry/6844903489596833800
https://blog.csdn.net/zhglance/article/details/76162176
https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/232
以上是关于Http的1.0和1.1以及2.0的区别详解的主要内容,如果未能解决你的问题,请参考以下文章
(纯干货)HTTP/1.0/1.1/2.0的区别以及http和https的区别
详解HTTP协议版本(HTTP/1.01.12.03.0区别)