HTTP(三):HTTP相关协议
本节主要介绍HTTP相关的各种协议。
TCP/IP协议
计算机网络里通信标准有两套,一套是OSI制定的标准协议,即OSI七层模型,另一套则是TCP/IP协议,即我们常说的四层模型。
OSI七层模型是国际标准组织制定的标准协议,而TCP/IP协议由于在OSI七层模型出来之前已经实施多年,得到了市场的认可,因此我们现在使用的都是TCP/IP协议,OSI更多的是对TCP/IP细节上的补充,偏向于学术。
TCP/IP 协议实际上是一系列网络通信协议的统称,其中核心的两个协议是TCP和IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂的协议栈。
这个协议栈有四层:
- 应用层:HTTP,DNS,FTP等
- 传输层:TCP,UDP
- 网络层:IP
- 链接层
IP 协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。IP 协议使用“IP 地址”的概念来定位互联网上的每一台计算机。
现在我们使用的 IP 协议大多数是 v4 版,地址是四个用“.”分隔的数字,例 如“192.168.0.1”,总共有 2^32,大约 42 亿个可以分配的地址。看上去好像很多,但互联网的快速发展让地址的分配管理很快就“捉襟见肘”。所以,就又出现了 v6 版,使用 8 组“:”分隔的数字作为地址,容量扩大了很多,有 2^128 个。
TCP 协议是“Transmission Control Protocol”的缩写,即传输控制协议,它位 于 IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础。
“可靠”是指保证数据不丢失,“字节流”是指保证数据完整,所以在 TCP 协议的两端可以如同操作文件一样访问传输的数据,就像是读写在一个密闭的管道里“流动”的字节。
HTTP 是一个"传输协议",但它不关心寻址、路由、数据完整性等传输细节,而要求这些工作都由下层来处理。因为互联网上流行的是 TCP/IP 协议,而它 刚好满足 HTTP 的要求,所以互联网上的 HTTP 协议就运行在了 TCP/IP 上,HTTP 也就可以更准确地称为“HTTP over TCP/IP”。
DNS协议
在 TCP/IP 协议中使用 IP 地址来标识计算机,数字形式的地址对于计算机来说方便,但对于人类来说却既难以记忆又难以输入。
因此“域名系统”(Domain Name System)出现了,用有意义的名字来作为 IP 地址的等价替代。
在 DNS 中,“域名”(Domain Name)又称为“主机名”(Host),为了更好地标记不 同国家或组织的主机,让名字更好记,所以被设计成了一个有层次的结构。
域名用“.”分隔成多个单词,级别从左到右逐级升高,右边的被称为“*域名”,例如表示商业公司的“com”、表示教育机构 的“edu”,表示国家的“cn”等。
但想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映射”到它的真实 IP,这就是所谓的“域名解析”。
目前全 世界有 13 组根 DNS 服务器,下面再有许多的* DNS、权威 DNS 和更小的本地 DNS,逐层递归地实现域名查询。
HTTP 协议中并没有明确要求必须使用 DNS,但实际上为了方便访问互联网上的 Web 服 务器,通常都会使用 DNS 来定位或标记主机名,间接地把 DNS 与 HTTP 绑在了一起。
URI/URL
通过DNS 和 IP 地址可以确定互联网上的主机,但主机上有那么多文本、图片、页面,到底要找哪一个呢?
为了标识主机上的每个资源,因此出现了 URI(Uniform Resource Identifier),中文名称是统一资源标识符,使用它就能够唯一地标记互联网上资源。
URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分。
https://mp.csdn.net/postedit?not_checkout=1
例如上面的网址,一般域名由三部分组成:
- 协议名:即访问该资源应当使用的协议,在这里是“https”
- 主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“mp.csdn.net”
- 路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里 是“/postedit?not_checkout=1”
HTTPS
通过TCP/IP,DNS,URL,终于可以找到网络上的某个资源,可以进行通信获取,但HTTP协议进行数据传送时都是明文的,因此出现了很多安全问题,尤其是近几年网络安全问题越来越引人重视,因此出现了HTTPS协议。
HTTPS协议简单来理解就是HTTP协议的安全版本,将HTTP协议通信时的明文进行了加密,这样即便通信数据报被黑客截获也无法**,保证了通信的安全。HTTPS同样基于TCP协议,只是在HTTP协议和TCP协议之间加了一层SSL/TLS层,这是一个负责加密通信的安全协议。
SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,改名为 TLS,即“Transport Layer Security”,但由于历史的原因还是有很多人称之为 SSL/TLS,或者直接简称为 SSL。
SSL 使用了许多密码学先进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,能够在不安全的环境中为通信的双方创建出一个秘密的、安全的传输通道,保证通信的安全。
如上面那个网址,就是采用了HTTPS协议。
代理
代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。
代理有很多的种类,常见的有:
- 匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器
- 透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端
- 正向代理:靠近客户端,代表客户端向服务器发送请求
- 反向代理:靠近服务器端,代表服务器响应客户端的请求
CDN,实际上就是一种代理,它代替源站服务器响应客户端的请求,通常扮演着透明代理和反向代理的角色。
由于代理在传输过程中插入了一个“中间层”,所以可以在这个环节做很多事, 比如:
- 负载均衡:把访问请求均匀分散到多台机器,实现访问集群化
- 内容缓存:暂存上下行的数据,减轻后端的压力
- 安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器
- 数据处理:提供压缩、加密等额外的功能
关于 HTTP 的代理还有一个特殊的“代理协议”(proxy protocol),它由知名的代理软件 HAProxy 制订。
上一篇: java数据数据加密用方法实现案例