大家好,这是一个更文挑战。(写错的各位看官包容) 这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战
http各个版本的特点
1. HTTP1.0
特点:
- 请求与响应支持 HTTP 头,响应含状态行,增加了状态码
- 支持 HEAD,POST 方法
- 支持传输 HTML 文件以外其他类型的内容
缺点:
- 非持久连接
- 客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销(注:RTT(Round Trip Time):一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值 )
- 短连接增加了网络传输的负担
2. HTTP1.1
特点
- 支持长连接
- 在HTTP1.0的基础上引入了更多的缓存控制策略
- 引入了请求范围设置,优化了带宽
- 在错误通知管理中新增了错误状态响应码
- 增加了Host头处理,可以传递主机名(hostname)
缺点: 传输内容是明文,不够安全
3. HTTPS
特点:
- 端口是443
- HTTPS运行在安全套接字协议(Secure Sockets Layer,SSL )或传输层安全协议(Transport Layer Security,TLS)之上,所有在TCP中传输的内容都需要经过加密
- SSL运行在TCP之上
- HTTPS可以有效防止运营商劫持
其实最早的一个http的版本是http0.9, 感兴趣的同学可以自行了解
http各个版本都做了什么优化?
1. HTTP 1.x优化(SPDY)
- 多路复用,为多路复用设立了请求优先级
- 对header部分进行了压缩
- 引入了HTTPS加密传输
- 客户端可以在缓存中取到之前请求的内容
2. HTTP2.0(SPDY的升级版)
特点
- HTTP2.0支持明文传输,而HTTP 1.X强制使用SSL/TLS加密传输
- 和HTTP 1.x使用的header压缩方法不同
- HTTP2.0 基于二进制格式进行解析,而HTTP 1.x基于文本格式进行解析
- 多路复用,HTTP1.1是多个请求串行化单线程处理,HTTP 2.0是并行执行,一个请求超时并不会影响其他请求
上面这么做的好处:
- 在 HTTP1 中浏览器限制了同一个域名下的请求数量(Chrome下一般是6个),当在请求很多资源的时候,由于队头阻塞,当浏览器达到最大请求数量时,剩余的资源需等待当前的六个请求完成后才能发起请求。
下面是关于HTTP1.0和HTTP1.1不同浏览器同一域名下请求数量的个数:
- HTTP2 中引入了多路复用的技术,这个技术可以只通过一个 TCP连接就可以传输所有的请求数据。多路复用可以绕过浏览器限制同一个域名下的请求数量的问题,进而提高了网页的性能
看下图:
3. HTTP 3.0 (QUIC)
特点:
- 基于UDP协议,为什么基于udp呢?主要是因为基于TCP的协议,由于切换网络之后,IP会改变,因而之前的连接不可能继续保持。而基于UDP的QUIC协议,则可以内建与TCP中不同的连接标识方法,从而在网络完成切换之后,恢复之前与服务器的连接
- 线头阻塞(HOL)问题的解决更为彻底
- 切换网络时的连接保持
HTTP1.0和HTTP1.1的一些区别?
1. 缓存处理
- HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断
- HTTP1.1引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
2. 带宽优化及网络连接的使用
-
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能
-
HTTP1.1在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接
2. 错误通知的管理
- 在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除
2. Host头处理
- 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址
- HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
2. 长连接
- HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
HTTPS与HTTP的一些区别
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题 看下图:
(tcp/ip协议的分层,可以参见我的另一文章:# 前端面试题之——http(一)
以上就是今天的分享,希望能帮到大家