前言
如果说TCP/IP协议是互联网通信的根基,那么HTTP就是其中当之无愧的王者,小到日常生活中的游戏,新闻,大到双十一秒杀等都能看到它的身影,据NetCraft统计,目前全球至少有16亿个网站、2亿多个独立域名,而这个庞大网络世界的底层运转机制就是HTTP,可以毫不夸张的说,无HTTP不通信!
画外音CP/IP协议群如下,IP不是IP地址,是InternetProtocol的简称
HTTP应用如此广泛,我们确实必要好好学习下它,不仅有助于我们理解和解释工作中的强制刷新,防盗链等现象和原理,还让我们在设计开源中间件时会有所启发,比如在设计MQ,Dubbo这些组件时,第一要务就是要设计协议,在其中你或多或少能看到HTTP协议的影子,学习了HTTP能让你在设计中间件等组件协议时,提供很好的思路
本文将会全面剖析HTTP的设计理念,助你彻底掌握HTTP,相信看完以下问题你会手到擒来!
什么是HTTP
HTTP全称HyperTextTransferProtocol「超文本传输协议」,拆成三个部分来看,即「超文本」,「传输」,「协议」
超文本:即「超越了普通文本的文本」,即音视频,图片,文件的混合体,大家常见的网页很多就内嵌了img,video这些标签解析展现而成的图片,视频等,除了这些超文本内容外,最关键的是超文本中含有超链接,超链接意味着网页等文件内容的超文本上可以点击链接到其他页面上,互联网就是通过这样的超链接构成的。
传输:传输意味着至少有两个参与者,比如A,B,这意味着HTTP协议是个双向协议,一般是将「超文本」按照约定的协议以二进制数据包的形式从A传到B或B传到A,A===B,我们把发起请求的叫请求方,接到请求后返回数据的那一方称为应答方,但需要注意的是传输也不限于两个参与者,允许中间有中转或者接力,只要参与者间遵循约定的协议即可传输。
如图示:传输可以有多个参与者,只要遵循相应的协议即可
协议:HTTP是一个协议,啥是协议?在日常生活中协议并不少见,比如我们租房时签订的租房协议,入职后和企业签订的劳动合同协议,「协」意味着至少有两人参与,「议」意味着双方要就某项条款达成一致,比如租房协议规定月付xx元,劳动合同协议规定月工资xx元,协议即对通信双方的约束,双方按照约定传输数据才能进行明白对方的意思,否则便是鸡同鸭讲。
经过以上解释,我们可以给HTTP下一个比较准确的定义了/p>
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
与HTTP相关的各种协议
HTTP虽然在当今互联网通信中占据统计地位,但要让它生效还必须依赖其他协议或规范的支持
1.URI和URL
首先既然我们要在两点之间传输超文本,那这个超文本该怎么表示?超文本即资源,互联网上资源这么多,如何唯一标记互联网上的资源。
使用URI(UniformResourceIdentifier)即统一资源标识符就可以唯一定位互联网上的资源。URI大家比较少听过,大家更熟悉的可能是URL(UniformResourceLocator),即统一资源定位符,URL其实是URI的一种子集,区别就是URI定义资源,而URL不单定义这个资源,还定义了如何找到这个资源。
URL主要由四个部分组成:协议、主机、端口、路径
协议:即通信双方指定的传输协议,应用最广的当然是本文要介绍的