[面试直通版]网络协议面试核心之HTTP,HTTPS,DNS-HTTP版本区别
目录
典型问题:
不同的时代
HTTP/0.9:
HTTP/1.0:
HTTP/1.1:
HTTP/1.0和HTTP/1.1的区别:
SPDY协议:
HTTP/2.0协议:
HTTP2.0和SPDY区别:
-
典型问题:
- 请简述HTTP 1.0、1.1、2.0的主要区别?
- HTTP头Connection:keep-alive是什么意思?解决了什么问题?
-
不同的时代
- 合并网络、创建互联网的时代(1984-1995)
- 商业化、私有化、中心化的时代(1995-2010)
- 去中心化、内容为王的时代(2010-至今)
-
HTTP/0.9:
- 1991发布,原型版本,功能简陋
- 只支持GET方法
- 不支持多媒体内容
- 服务器只能回应HTML格式字符串,不能回应别的格式
-
HTTP/1.0:
- 1996年5月发布
- 增加多种方法
- 支持多媒体对象
- 无连接
- 指的是限制每次连接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后,即断开连接
- 特点:请求时建立连接,请求完释放连接,以尽快将资源释放出来给其他客户端,适用于请求非静态资源;
- 如果请求的是静态资源,即访问图片每次都需要建立一次TCP连接就显得低效;
- Keep-Alive被提出来解决这效率低的问题,它能使客户端到服务器端的连接持续有效,它能避免建立或重新建立连接;但如果Keep-Alive值设置过大且这期间无其它操作,也是会造成资源浪费,所以需要根据实际应用设置;
- 无状态
- 是指对于事务处理没有记忆能力
- 即我们给服务器发送HTTP请求后,服务器根据我们的请求,返回响应信息给我们,但服务器不会记录任何信息,这意味着如果下一次请求,需要上一次请求的信息,则它必须重传,这可能导致每次传送的数据量变大,造成应答时间过长
- 现如今的Web应用程序,都是需要客户端与服务器进行动态交互
- 如:用户选中商品加入购物车之后,点击支付时,需要知道哪些商品存在购物车中;
- HTTP的无状态特性影响了这些需要交互的应用程序,为了解决这一问题,Cookie和Session诞生了;
- 另外
- 这一版本在请求和响应中加入了HTTP版本号,这一特点在之后的版本中保持不变
- 新增状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等
-
HTTP/1.1:
- 1997年1月发布
- 引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive
- 对于同一个域名,大多数浏览器允许同时建立6个持久连接,引入了管道机制,即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
- 字节范围请求:若客户端此时已经有一部分数据,为节省带宽,可以只向服务器端请求一部分数据,这个功能在请求头的range头域实现
- 还是存在缺点,在同一个TCP里边所有数据的通信都是按照次序的,服务器只有处理完一个回应,才会解决下一个回应要是前边某个回应处理的比较慢,就会出现后边很多回应等待的情况,这就是常说的队头阻塞
-
HTTP/1.0和HTTP/1.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),方便了开发者自由的选择以便于充分利用带宽和连接
- (3)错误通知的管理:
- 在HTTP1.1中新增24个状态响应码,如409(Conflict)表示请求的资源与资源当前状态冲突;410(Gone)表示服务器上的某个资源被永久性的删除
- (4)Host 头处理:
- 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)
- 但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址
- HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
- (5)长连接:
- HTTP 1.1支持持久连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟
- 在HTTP1.1中默认开启Connection: keep-alive,弥补了HTTP1.0每次请求都要创建连接的缺点
-
SPDY协议:
- SPDY:2009年谷歌研发,综合HTTPS和HTTP两者优点于一体的传输协议,主要特点:
- (1)降低延迟
- 针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)
- 多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率
- (2)请求优先级(request prioritization)
- 多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞
- SPDY允许给每个request设置优先级,重要的请求就会优先得到响应
- 比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,可以保证用户能第一时间看到网页内容
- (3)header压缩
- HTTP1.x的header很多时候都是重复多余的
- 选择合适的压缩算法可以减小包的大小和数量
- (4)基于HTTPS的加密协议传输
- 大大提高了传输数据的可靠性
- (5)服务端推送(server push)
- 采用了SPDY的网页,例如网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了
-
HTTP/2.0协议:
- HTTP/2.0:2015年发布,HTTP2.0是SPDY的升级版
- (1)头信息和数据体都是二进制,称为头信息帧和数据帧
- (2)复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了"队头堵塞",此双向的实时通信称为多工(Multiplexing)
- (3)引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;
- 客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
- (4)HTTP/2.0 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)
-
HTTP2.0和SPDY区别:
- (1)HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
- (2)HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE
相关内容