做为前端开发者,咱们有必要了解数据在网络中是怎样传输的,而HTTP是浏览器中使用最多的与服务器进行通讯的协议,经过对协议的学习,使咱们对浏览器工做流程及解决项目优化瓶颈都有很重要的意义。所以本文就HTTP的发展历程及发展各个阶段作了哪些优化进行总结说明。也算是对本身这一阶段的学习作个总结。css
主要功能是在网络之间传输HTML超文本文件,因此又叫超文本传输协议,实现较为简单,只是基于请求与响应。整个传输过程是基于TCP下的,因此传输以前要首先创建TCP链接。具体流程图以下图所示: html
随着互联网的不断发展,咱们对浏览器展现的页面要求也愈来愈高,在浏览器中加载的资源不能只局限于HTML,还包括JS、CSS、IMG、video、audio等其余类型资源,因此HTTP在数据传输过程当中加入了请求头与响应头(以key-value对形式存在),用来传输更多信息。流程图以下: 前端
HTTP/1.0的大幅度改进,增长了客户端与服务端的拓展性,但因为客户端对性能或者用户体验的要求不断提升,当资源过多时没法知足咱们的需求,所以HTTP/1.1又作了大量改进,主要改进有如下几点:浏览器
首先HTTP/1.0采用的是短链接,也就是每次请求都要创建TCP链接、断开链接的操做,无形增大了不少开销。因此HTTP/1.1增长了持久链接,意思是链接一旦创建,就能够传输屡次HTTP请求,经过头信息Connection: keep-alive实现,默认开启,而且容许同一域名下最多同时创建6个TCP链接。如需关闭传入close便可。缓存
在HTTP/1.0 时,经过响应头中设置Content-Length告知浏览器资源大小,但目前不少页面的内容都是动态生成的,传输前没法判断资源大小,因此浏览器不知道何时传输完。安全
HTTP/1.1 经过引入 Chunk transfer 机制来解决这个问题,服务器会将数据分割成若干个任意大小的数据块,每一个数据块发送时会附上上个数据块的长度,最后使用一个零长度的块做为发送数据完成的标志。这样就提供了对动态内容的支持。服务器
经过引入cookie记录和保存用户信息,由服务器端生成,经过set-cookie告知客户端,浏览器将其存放在内存或磁盘中,set-cookie只能包含一个name/value名值对,可是服务器能够发送多个set-cookie头部,客户端经过cookie请求头将cookie发送服务端验证,响应头不一样的是,他只能发送一个cookie请求头,但它能够包含多个名值对 。cookie
在HTTP/1.1中仍然存在不少能够优化的问题好比TCP慢启动、带宽利用率不高、并发链接的限制、在同一TCP链接内每一个请求时串行的、不支持服务器推送等问题。网络
在HTTP/2.0版本中对上述问题主要作了如下改进:并发
具体实现是在应用层添加二进制分帧层,数据经过二进制分帧层变成一个个标有streamID的数据流,每一个stream能够包含一个或多个数据帧。接收端能够经过streamID将消息进行组装。这样就实现了同一TCP中能够并发传送多个HTTP请求。
对于某些关键性资源,例如js、css咱们每每但愿服务端优先处理,在HTTP/2.0中能够经过stream中的Priority设置帧来配置优先级
对于HTML页面中引用的资源,若是咱们在请求html时,服务端解析到须要哪些js或css资源文件而且一并发送给客户端,而不是等到客户端解析html后去请求资源文件。这种对于页面的加载的速度提高是很是大的。
HTTP/2.0中能够实现将资源提早推送到客户端进行缓存。由服务端把请求放到PUSH_PROMISE帧,再额外推送资源。客户端再解析到资源请求时就能够直接在缓存中读取
这样减小TCP链接个数,从而优化TCP慢启动的问题