大家都知道,我们的浏览器跟后台的交互协议,无论是看新闻,还是刷微博,逛贴吧,买买买,最常见的就是Http协议,不仅如此,我们很多的App与后台的交互,也采用HTTP协议,为什么不采用其他协议呢?最主要的原因,是HTTP的相关技术栈已经非常成熟,使用起来也非常方便。
如果你学过网络分层,就知道HTTP是属于传输层协议,而TCP是属于网络层协议,HTTP是建立再TCP之上,所以很多HTTP的性能瓶颈与优化技巧都是与TCP息息相关。TCP在此之间充当了什么角色呢?举个例子,网络的场景是非常复杂的,可能你从一个机器上发送一个消息给另外一个机器,中间需要经过数十台机器与设备,不可避免地就有可能会发送失败,但发送失败地时候,TCP就会负责重试,而它地老板"HTTP"就不关心这些了,他只关心我让你干活,还有你最后的结果,至于中间的场景,那个是TCP干的事情。
HTTP诞生于1991年,那个时候只有一个GET命令,浏览器跟服务器建立连接之后,服务器会向客户端回应html格式的字符串,发送完毕后,就关闭中间的TCP连接,下次请求需要重新建立连接。
1996年HTTP/1.0版本发布,因为计算机与网络技术的提高,人们上网不仅要看文字,还要看图片,看视频甚至是下载电脑应用,所以HTTP也随之升级,支持了更多格式,为了支持这些格式,也引入了信息头,用来描述数据与编码等。
1997年HTTP/1.1发布,虽然是一个子版本,但是直到今天还是被广泛的应用,主要是对HTTP/1.0做一些性能上面的优化,例如引入持久连接、引入管道机制,让客户端跟服务端的交互可以更加顺畅。
2015年,HTTP/2发布,再一次提升了性能,并且减少了带宽浪费,后面我们会进一步进行说明。
HTTP包主要分为3部分,第一部分是请求行,用来记录使用什么方法,访问了什么地址,接着是首部,用来描述包的数据类型、编码格式、是否使用缓存等信息,最后才是实体,是具体的包内容。
那么,一个HTTP请求时如何从客户端到服务器,最后又回来的呢?当客户端发起一次HTTP请求的时候,会把这些数据变成一个流交给TCP层,TCP又会加上源地址跟目标地址,然后交给IP层,最后交给数据链路层,穿过层层交换机与网关,最后到达服务器,服务器处理完之后,再重新返回给客户端。
好了,今天的HTTP的基础介绍我们就讲到这里,如果你有什么疑问或者建议,欢迎评论,欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)