http 1.0 的特点(延迟原因):
-
浏览器阻塞:对于同一个域名,浏览器客户端发送给服务端的连接数是有限制的,当连接数超过浏览器最大连接数的限制时,后续的请求就会发生阻塞;
-
DNS查询:在浏览器中访问一个网址或发送一个请求时,浏览器首先需要得到域名对应的IP,即服务器的IP地址,这就需要通过DNS来解析域名。若此前获取过该域名的IP,可将结果缓存起来,下次从缓存(浏览器缓存、系统缓存、路由器缓存)中查询IP可节省一些时间;
-
建立连接:http 是基于TCP协议的,每次请求数据,都需要与服务器建立TCP连接,至少要经过三次握手,浏览器才能向服务器传输报文数据;TCP连接还有一个特点——慢启动,即 TCP 会进行自我“调谐”,最开始会限制数据传输速度,待数据传输成功后,会慢慢提高传输的速度。
http 1.1 相比 http 1.0 的优点
- 缓存处理:http 1.0 主要使用header中的if-modified-since、expires来判断缓存,http 1.1 增加了更多缓存控制方式,如:if-unmodified-since、if-match、if-none-match
- 错误处理:http 1.1 增加了更多的错误状态响应码,便于浏览器对错误类型的识别
- host头处理:http 1.0 的请求地址中不带 主机IP地址,因为它认为每台服务器的IP地址都是唯一的;现在随着虚拟主机技术的发展,一台物理服务器上可能存在多个虚拟主机,并且它们都共享一个IP地址,所以 http 1.1 进行了相应的升级,在 http 1.1 的请求和响应中都添加了host地址
- 节约带宽&断点续传:在 http 1.0 中,客户端只需要某个对象的一部分,但服务器会返回整个对象,浪费带宽,并且不支持断点续传功能;在http 1.1 中,在header中增加了 range 字段,可支持只向服务器请求某个资源对象的一部分,返回码是206,达到了充分利用带宽和连接的目的
- 长连接:http1.1支持长连接和请求的流水线处理,即在一个TCP连接上可以传送多个http请求,在一定程度上减少了每个请求都需要建立连接和关闭连接的耗时
http 2.0 相比 http 1.x 的优点
-
多路复用:指浏览器可同时向服务器发送多个http请求,服务器也可同时处理多个请求,将结果返回给浏览器;若需规定某些请求的优先级,则可以给这些请求携带上唯一标识,打上标签,服务器即可通过这些标签识别
-
头部压缩:http 请求和响应都是由 状态行、请求/响应头部、消息主体 三部分构成,消息主体通常会经过压缩后再传输,但请求/响应头部和状态行都没有经过压缩,随着web网页越来越复杂,头部的内容也越来越多,所以 http 2.0 使用encoder来减少需要传输的header内容大小,以此节省资源
头部压缩的原理: 浏览器和服务器需要维护一份相同的静态字典和动态字典(类似键值对),以此支持header中的常见内容通过“键”的方式传输,大大减少传输数据量。
-
文本格式=>二进制格式:http 1.x都是采用文本格式,但是基于文本协议的格式解析起来有一些困难,因为文本的组合形式太多;http 2.0 采用二进制格式,二进制只有 0和1 的组合形式,解析更加容易
-
服务端推送:指在客户端请求之前就向客户端发送数据的机制。例如,当浏览器向服务端请求一个index.html页面时,这个页面还需要一些js和css文件,在http1.0中就需要html文件返回成功后,浏览器再次向服务器请求这些资源,这就会导致网络空闲、网络利用率低。为了解决这个问题,在http2.0中,增加了服务端推送这个功能,即在浏览器请求一个html页面时,服务器就开始推送它需要的一些静态资源,充分利用了空闲的网络,从而加快页面加载时间
https 和 http的区别
https就是安全版的http,在http层和tcp层之间添加了 ssl 层,实现数据加密,增加网络连接的安全性。
- https需要在CA申请证书
- http是超文本传输协议,采用明文传输的方式,是无状态的,而https是采用ssl加密传输协议,还可进行身份认证
- http和https的连接方式不同,用的端口也不同,http是80端口,https的443端口
https的工作原理
- 客户端使用https连接向服务器发送请求,要求与服务器建立ssl连接
- 服务器收到请求后,会将网站的安全证书信息(包含公钥)传送给客户端
- 客户端与服务端协商ssl连接的安全等级,即信息加密的等级
- 客户端按照协商好的安全等级建立会话密钥,然后用公钥将会话密钥加密,并将其传送给服务端
- 服务端收到加密后的会话密钥后,用私钥将其解密,得到会话密钥,并利用会话密钥加密和客户端之间的通信
多路复用和长连接的区别
多路复用 可允许多个请求同时在一个连接上并行执行,其中一个请求任务耗时严重,不会影响其他请求的正常执行;长连接 是多个请求排队等待处理,后面的请求需等待前面请求返回后才能被执行,若某请求超时,后面的请求就会被阻塞。
可简单理解为,一个(多路复用)并行执行多个请求,一个(长连接)串行执行多个请求。