HTTP的前世今生:一次0了解HTTP、HTTPS、SPDY、HTTP2,相信大家都已经很熟悉了。今天就给大家好好介绍一下HTTP的前世今生。HTTP/0.9HTTP最早的版本诞生于1991年,与现在相比,这个最早的版本极其简单。没有HTTP头,没有状态码,甚至没有版本号。后来,为了与其他版本进行比较,它的版本号被设置为0.9。HTTP区分。HTTP/0.9只支持一种方法——Get,请求只有一行。GET/hello.html响应也非常简单,只包含html文档本身。Helloworld当TCP连接建立后,服务器返回一个HTML格式的字符串给客户端。发送后,关闭TCP连接。由于没有状态代码或错误代码,如果在服务器处理过程中发生错误,只会返回一个包含有关问题信息的特殊HTML文件。这是HTTP/0.9的最早版本。HTTP/1.01996年发布了HTTP/1.0版本,大大丰富了HTTP的传输内容。除了文字,还可以发送图片、视频等,这为互联网的发展奠定了基础。与HTTP/0.9相比,HTTP/1.0主要有以下特点:请求和响应支持HTTP头,添加状态码,响应对象开头是一个响应状态行协议版本信息需要和请求一起发送,支持HEAD、POST方法支持传输HTML文件以外的其他类型的内容。典型的HTTP/1.0请求如下所示:GET/hello.htmlHTTP/1.0User-Agent:NCSA_Mosaic/2.0(Windows3.1)200OKDate:Tue,15Nov199608:12:31GMTServer:CERN/3.0libwww/2.17Content-Type:text/html包含图像的页面1.1已发布。HTTP/1.1更像是对HTTP/1.0的完善。在HTTP1.1中主要有以下改进:可以重用连接增加管道:HTTP管道是一种批量提交多个HTTP请求的技术。传输过程中无需等待服务器响应。管道机制必须通过持久连接来完成。通过浏览器批量提交HTTP请求可以大大减少页面的加载时间,尤其是在传输延迟(lag/latency)较高的情况下。需要注意的一点是,只有幂等请求才能使用管道,比如GET、HEAD方法。chunkedencodingtransmission:这种编码将entity以chunk为单位进行传输,并逐块标记长度,直到长度为0。block表示传输结束,这在实体长度未知时特别有用(比如动态生成的数据)数据库)引入更多的缓存控制机制:比如etag,cache-control引入了内容协商机制,包括语言、编码、类型等,让客户端和服务器商定交换最合适的内容。请求报文和响应报文都支持Host头字段:在HTTP1.0中认为每个服务器都绑定了一个唯一的IP地址,所以请求报文中的URL不传递主机名(hostname)。但是随着虚拟主机技术的发展,一台物理服务器上可以存在多个虚拟主机(Multi-homedWebServers),它们共享一个IP地址。因此,Host头的引入??是很有必要的。增加了OPTIONS、PUT、DELETE、TRACE、CONNECT方法虽然HTTP/1.1优化了很多点,作为目前使用最广泛的协议版本,已经可以满足很多网络需求,但是随着网页越来越复杂,甚至演变成作为一个独立的应用,HTTP/1.1逐渐暴露出一些问题:传输数据时,每次都必须重新建立连接,这对移动端尤其不友好。传输内容为明文,不够安全。每次请求的header变化不大,造成keep-alive的浪费,给服务器带来性能压力。为了解决这些问题,HTTPS和SPDY应运而生。HTTPSHTTPS是一个以安全为目标的HTTP通道。简单的说,它是一个安全版的HTTP,即在HTTP的基础上增加了一个SSL层。HTTPS的安全基础是SSL,所以加密的详细内容需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立信息安全通道,保证数据传输的安全;二是确认网站的真实性。HTTPS与HTTP的主要区别如下:HTTPS协议使用ca申请证书。由于免费证书很少,需要收取一定的费用。HTTP是明文传输,HTTPS是安全的SSL加密传输协议。HTTP和HTTPS使用完全不同的连接方式和不同的端口。前者是80,后者是443。其实SPDY并不是一个新的协议,而是HTTP之前的会话层。2010年至2015年间,谷歌通过实施实验性SPDY协议展示了一种在客户端和服务器之间交换数据的替代方法。它收集了浏览器和服务器端开发人员关注的问题,解决了增加的响应量,并解决了复杂的数据传输问题。SPDY项目启动时的既定目标是:页面加载时间(PLT)减少50%。网站作者无需修改任何内容。无需更改网络基础设施即可最大限度地降低部署复杂性。与开源社区合作开发这个新协议。收集真实世界的性能数据以验证此实验协议是否有效。为了达到减少页面加载时间的目的,SPDY引入了一个新的二进制帧数据层来实现多向请求和响应、优先级排序、最小化和消除不必要的网络延迟,目的是更高效地利用底层的TCP连接.2015年HTTP/2.0时代来临,HTTP/2.0问世。先介绍一下HTTP/2.0的特点:Usebinaryframinglayer:在应用层和传输层之间增加一个二进制框架层,从而在不改变HTTP语义的情况下实现HTTP方法、状态码、URI和HTTP。在头字段的情况下,突破了HTTP1.1的性能限制,提高了传输性能,实现了低延迟和高吞吐量。在binaryframing层上,HTTP2.0会将所有传输的信息分成更小的消息和帧,并以二进制格式进行编码,其中HTTP1.x的header信息会被封装到Headersframe中,我们将requestbody进行封装进入数据框。多路复用:对于HTTP/1.x,即使开启了长连接,请求也是串行发送的。当带宽足够时,带宽的利用率不够。HTTP/2.0采用多路复用方式,可以并行发送多个请求,提高带宽利用率。数据流优先:既然可以并发发送请求,那么如果服务器正在专注于发送图片资源,而浏览器正在等待关键的CSS或JS文件渲染页面呢?HTTP/2.0可以为数据流设置一个优先级值,这个优先级值决定了客户端和服务端处理不同流所采用的不同优先级策略。服务端推送:在HTTP/2.0中,服务端可以向客户端发送请求以外的内容。比如在请求一个页面的时候,服务器会直接把页面相关的logo,CSS等文件推送给客户端,而不等请求来了就发送,因为服务器认为客户端会用到这些东西.这相当于将所有资源分组在一个HTML文档中。头压缩:使用头表来跟踪和存储之前发送的键值对,对于相同的内容,不会在每次请求和响应时都发送。可见HTTP/2.0的新特性与SPDY非常相似。事实上,HTTP/2.0最初是基于SPDY设计的,可以说是SPDY的升级版。不过HTTP/2.0与SPDY还是有区别的,主要有以下两点:HTTP2.0支持明文HTTP传输,而SPDY强制使用HTTPS。HTTP2.0消息头的压缩算法采用HPACK代替SPDY采用的DEFLATE。