18910140161

一次性搞懂 HTTP、HTTPS、SPDY、HTTP2

顺晟科技

2021-06-16 10:39:03

227

作为互联网通信协议的老手,HTTP协议在今天经历了三个版本的变化。现在最新的版本是HTTP2.0,相信大家已经很熟悉了。今天我就给大家好好介绍一下HTTP的前世。

HTTP/0.9

HTTP最早的版本诞生于1991年。相比现在的版本,这个最早的版本极其简单,没有HTTP头,没有状态码,甚至没有版本号。后来将其版本号设置为0.9,以区别于其他版本的HTTP。HTTP/0.9只支持一个方法,——Get,请求只有一行。

GET/hello.html

响应也很简单,只包括html文档本身。

超文本标记语言

编译

/HTML

TCP建立连接后,服务器向客户端返回一个HTML格式的字符串。发送后关闭TCP连接。由于没有状态码和错误码,如果服务器在处理过程中出错,只会返回一个包含问题描述信息的特殊HTML文档。这是HTTP/0.9最早的版本。

HTTP/1.0

1996年,HTTP/1.0版本发布,极大地丰富了HTTP的传输内容。除了文字,图片和视频也可以发送,这为互联网的发展奠定了基础。与HTTP/0.9相比,HTTP/1.0主要有以下特点:

请求和响应支持HTTP头,并添加了状态代码。响应对象以响应状态行开始

协议版本信息需要随请求一起发送,并支持HEAD和POST方法

支持HTML文件以外的其他类型内容的传输

典型的HTTP/1.0请求如下所示:

GET/hello.htmlHTTP/1.0

用户代理:NCSA_Mosaic/2.0(窗口3.1)

200OK

日期:1996年11月15日15Nov199608:12:31GMT

Server:CERN/3.0libwww/2.17

内容类型:文本/html

超文本标记语言

包含图片的页面

IMGSRC='/smile.gif '

/HTML

HTTP/1.1

HTTP/1.0发布几个月后,HTTP/1.1发布了。HTTP/1.1更是HTTP/1.0的完美。在HTTP1.1中,主要有以下改进:

连接可以多路复用

添加管道:HTTP管道是批量提交多个HTTP请求的技术,不需要先等待服务器的响应。流水线机制必须通过persistentconnection完成。浏览器对HTTP请求的大规模提交可以大大缩短页面的加载时间,尤其是在高滞后/延迟的情况下。需要注意的一点是,只有幂等请求可以使用管道,比如GET和HEAD方法。

分块代码传输:该代码以块的形式传输实体,并逐块标记长度,直到长度为0的块指示传输结束,这在实体长度未知时(如数据库动态生成的数据)尤其有用

引入更多的缓存控制机制,如etag和缓存控制

介绍内容协商机制,包括语言、编码、类型等。并允许客户端和服务器同意交换最合适的内容

请求消息和响应消息都支持主机头域:在HTTP1.0中,认为每台服务器都绑定了的IP地址,因此请求消息中的URL不传递主机名。然而,随着虚拟主机技术的发展,一台物理服务器上可以有多个多宿主网络服务器,它们共享一个IP地址。因此,有必要引入主机头。

添加了选项、放置、删除、跟踪和连接方法

虽然HTTP/1.1已经在很多方面进行了优化,并且作为使用最广泛的协议版本,已经能够满足很多网络需求。然而,随着网页变得越来越复杂,甚至演变成独立的应用程序,HTTP/1.1逐渐暴露出一些问题:

当传输数据时,每次都必须重新建立连接,这对移动终端尤其不友好

传输内容是明文,不够安全

头内容太大,每个请求头变化不大,造成浪费

保持活动给服务器带来了性能压力

为了解决这些问题,HTTPS和社民党应运而生。

SPDY

其实SPDY并不是一个新的协议,而是HTTP之前的会话层。

从2010年到2015年,谷歌通过实践一个实验性的SPDY协议,证明了一种在客户端和服务器之间交换数据的替代方法。收集了浏览器端和服务器端开发者关注的焦点问题,明确了响应量的增加,解决了复杂的数据传输。启动SPDY项目时的默认目标是:

页面加载时间(PLT)减少50%。

网站作者不需要修改任何东西。

在不改变网络基础设施的情况下,更大限度地降低部署复杂性。

与开源社区合作开发这个新协议。

收集真实的性能数据,验证该实验协议是否有效。

为了减少目标和页面加载时间,SPDY引入了新的二进制成帧数据层,实现多向请求和响应,区分优先级,最小化和消除不必要的网络延迟,从而更有效地利用底层的TCP连接。

HTTP/2.0

时间到了2015年,HTTP/2.0出来了。我们先来介绍一下HTTP/2.0的特点:

使用二进制成帧层:在应用层和传输层之间增加一个二进制成帧层,从而突破HTTP1.1的性能限制,提高传输性能,在不改变HTTP、HTTP方法、状态码、URI和报头字段语义的情况下,实现低延迟、高吞吐量。在二进制成帧层,HTTP2.0将所有传输的信息分成更小的消息和帧,并以二进制格式编码,其中HTTP1.x的头信息封装在Headers帧中,我们的requestbody封装在Data帧中。

二元框架

复用:对于HTTP/1.x,即使打开了长连接,请求也是串行发送的。带宽充足的时候,带宽利用率不够。HTTP/2.0采用复用方式,可以并行发送多个请求,提高了带宽利用率。

多路技术

数据流优先级:既然可以并发发送请求,那么如果浏览器在等待关键CSS或者JS文件完成页面渲染,而服务器在专注于发送图像资源呢?HTTP/2.0可以为数据流设置一个优先级值,这决定了客户端和服务器对不同的流采用不同的优先级策略处理。

服务器推送:在HTTP/2.0中,服务器可以将请求之外的内容发送给客户端。比如在请求一个页面的时候,服务器会直接把logo、CSS等与页面相关的文件推给客户端,不会等到请求来了,因为服务器认为客户端会用到这些东西。这相当于在一个HTML文档中收集所有资源。

标头压缩:标头表用于跟踪和存储之前发送的键值对。对于相同的内容,它不会在每次发出请求和响应时发送。

以上是一次性了解HTTP、HTTPS、SPDY、HTTP2的完整介绍。如果你想了解更多关于Html5的教程,请关注PHP中文网站。

微信截图_20181113161157.png

本文转载自中文网站

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航