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

猜你喜欢

转载自blog.csdn.net/u010321471/article/details/108505738