一、写在前面 今天看到一道面试题,关于http 的不同版本的区别,觉得有点懵,所以写一篇博客来总结一下。 二、http的历史
早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascript,来丰富我们的页面展示,当 ajax 的出现,我们又多了一种向服务器端获取数据的方法,这些其实都是基于 HTTP 协议的。同样到了移动互联网时代,我们页面可以跑在手机端浏览器里面,但是和 PC 相比,手机端的网络情况更加复杂,这使得我们开始了不得不对 HTTP 进行深入理解并不断优化过程中。
三、HTTP的基本优化 影响HTTP网络请求的因素主要有两个:带宽和延迟 。 带宽: 之前的带宽可能是网络请求比较严重的问题,但是现在的话,网络基础设施不断的完善,带宽已经不是什么大的问题了。 延迟:——浏览器阻塞 延迟:——DNS解析 建立连接:——三次握手和慢启动 四、HTTP1.0和HTTP1.1的区别 4.1、缓存处理 在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。 4.2、允许断点续传 在HTTP1.0中如果想要服务器发送部分资源,是不行的,服务器会发送全部的资源过来,但是在HTTP1.1中,是允许断点续传的,其存在一个range头域,可以允许传输资源的一部分,返回的状态码为206,这样也就方便开发者利用宽带资源。 4.3、错误通知的管理 HTTP1.1新增了24个错误资源响应码。 4.4、长链接 HTTP1.1中默认使用的是长链接,也就是一个TCP连接可以支持多次HTTP请求。 五、HTTPS和HTTP之间的区别
1、HTTPs需要CA证书,证书免费的很少,一般需要缴费。
2、HTTP基于TCP的应用层协议,一般是明文传输,但是HTTPS是基于SSL/TLS层,在传输过程中会进行加密。
3、HTTP和HTTPS的连接端口不一样,HTTP是80端口,HTTPS是443端口。
4、HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
六、HTTP2.0和HTTP1.X相比的新特性 二进制传输:
新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的
格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很
多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二
进制格式,实现方便且健壮。
多路复用:
多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享
机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接
的request可以随机的混杂在一起,接收方可以根据request的 id将request再归
属到各自不同的服务端请求里面。
header压缩
header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且
每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方
各自cache一份header fields表,既避免了重复header的传输,又减小了需要传
输的大小。
服务器推送
例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务
端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直
接从缓存中获取到,不用再发请求了。
|