04 | HTTP世界全览(下):与HTTP相关的各种协议

Posted 浅尝不止ilyc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04 | HTTP世界全览(下):与HTTP相关的各种协议相关的知识,希望对你有一定的参考价值。

        在上一讲中,我介绍了与 HTTP 相关的浏览器、服务器、CDN、网络爬虫等应用技术。

        今天要讲的则是比较偏向于理论的各种 HTTP 相关协议,重点是 TCP/IP、DNS、URI、HTTPS 等,希望能够帮你理清楚它们与 HTTP 的关系。


        同样的,我还是画了一张详细的思维导图,你可以点击后仔细查看。

TCP/IP


        TCP/IP 协议是目前网络世界“事实上”的标准通信协议,即使你没有用过也一定听说过,因为它太著名了。

        TCP/IP 协议实际上是一系列网络通信协议的统称,其中最核心的两个协议是 TCP 和 IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。

        这个协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP 和 IP 则在中间:TCP 属于“传输层”,IP 属于“网际层”。

        协议的层级关系模型非常重要,我会在下一讲中再专门讲解,这里先暂时放一放。IP 协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。

        TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于 IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础。“可靠”是指保证数据不丢失,“字节流”是指保证数据完整,所以在 TCP 协议的两端可以如同操作文件一样访问传输的数据,就像是读写在一个密闭的管道里“流动”的字节。

        在第 2 讲时我曾经说过,HTTP 是一个"传输协议",但它不关心寻址、路由、数据完整性等传输细节,而要求这些工作都由下层来处理。因为互联网上最流行的是 TCP/IP 协议,而它刚好满足 HTTP 的要求,所以互联网上的 HTTP 协议就运行在了 TCP/IP 上,HTTP 也就可以更准确地称为“HTTP over TCP/IP”。


DNS


        在 DNS 中,“域名”(Domain Name)又称为“主机名”(Host),为了更好地标记不同国家或组织的主机,让名字更好记,所以被设计成了一个有层次的结构。域名用“.”分隔成多个单词,级别从左到右逐级升高,最右边的被称为“顶级域名”。

        对于顶级域名,可能你随口就能说出几个,例如表示商业公司的“com”、表示教育机构的“edu”,表示国家的“cn”“uk”等,买火车票时的域名还记得吗?是“www.12306.cn”。


         域名解析的实际操作要比刚才的例子复杂很多,因为互联网上的电脑实在是太多了。目前全世界有 13 组根 DNS 服务器,下面再有许多的顶级 DNS、权威 DNS 和更小的本地 DNS,逐层递归地实现域名查询。

         HTTP 协议中并没有明确要求必须使用 DNS,但实际上为了方便访问互联网上的 Web 服务器,通常都会使用 DNS 来定位或标记主机名,间接地把 DNS 与 HTTP 绑在了一起。


URI/URL


       就像小明管理了一大堆文档,你怎么告诉他是哪个呢?所以就出现了 URI(Uniform Resource Identifier),中文名称是 统一资源标识符,使用它就能够唯一地标记互联网上资源。

         URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分。我就拿 nginx 网站来举例,看一下 URI 是什么样子的。

   

http://nginx.org/en/download.html


你可以看到,URI 主要有三个基本的部分构成:


1、协议名:即访问该资源应当使用的协议,在这里是“http”;

3、路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/en/download.html”。


HTTPS


     在 TCP/IP、DNS 和 URI 的“加持”之下,HTTP 协议终于可以自由地穿梭在互联网世界里,顺利地访问任意的网页了,真的是“好生快活”。

你:“喂,小明啊,接下来我们改用火星文通话吧。”

小明:“好啊好啊,就用火星文吧。”

你:“巴拉巴拉巴拉巴拉……”

小明:“巴拉巴拉巴拉巴拉……”


       如果你和小明说的火星文只有你们两个才懂,那么即使窃听到了这段谈话,他也不会知道你们到底在说什么,也就无从破坏你们的通话过程。

   HTTPS 就相当于这个比喻中的“火星文”,它的全称是“HTTP over SSL/TLS”,也就是运行在 SSL/TLS 协议上的 HTTP。

     注意它的名字,这里是 SSL/TLS,而不是 TCP/IP,它是一个负责加密通信的安全协议,建立在 TCP/IP 之上,所以也是个可靠的传输协议,可以被用作 HTTP 的下层。因为 HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,其中的“HTTP”和“TCP/IP”我们都已经明白了,只要再了解一下 SSL/TLS,HTTPS 也就能够轻松掌握。


代理


        代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。

        代理有很多的种类,常见的有:匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;

        透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;

        正向代理:靠近客户端,代表客户端向服务器发送请求;反向代理:靠近服务器端,代表服务器响应客户端的请求;

        上一讲提到的 CDN,实际上就是一种代理,它代替源站服务器响应客户端的请求,通常扮演着透明代理和反向代理的角色。

        由于代理在传输过程中插入了一个“中间层”,所以可以在这个环节做很多有意思的事情,比如:负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;内容缓存:暂存上下行的数据,减轻后端的压力;安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;数据处理:提供压缩、加密等额外的功能。

        关于 HTTP 的代理还有一个特殊的“代理协议”(proxy protocol),它由知名的代理软件 HAProxy 制订,但并不是 RFC 标准,我也会在之后的课程里专门讲解。


小结


        这次我介绍了与 HTTP 相关的各种协议,在这里简单小结一下今天的内容。1、TCP/IP 是网络世界最常用的协议,HTTP 通常运行在 TCP/IP 提供的可靠传输基础上;

3、URI 是用来标记互联网上资源的一个名字,由“协议名 + 主机名 + 路径”构成,俗称 URL;

4、HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,为 HTTP 套了一个安全的外壳;

5、代理是 HTTP 传输过程中的“中转站”,可以实现缓存加速、负载均衡等功能。


课下作业


1、DNS 与 URI 有什么关系?



以上是关于04 | HTTP世界全览(下):与HTTP相关的各种协议的主要内容,如果未能解决你的问题,请参考以下文章

03 | HTTP世界全览(上):与HTTP相关的各种概念

HTTP协议全览

HTTP协议全览

视频造船与拼图 —— 观世界最大造船厂之后感

Redis源码解析-全览

单片机相关的网站