01 | 时势与英雄:HTTP的前世今生
HTTP/0.9
- 只允许get方法。
- 响应请求后立即关闭连接。
- 采用了纯文本格式,只能获取文本资源。 HTTP/1.0
- 增加了 HEAD、POST 等新方法;
- 增加了响应状态码,标记可能的错误原因;
- 引入了协议版本号概念;
- 引入了 HTTP Header(头部)的概念,让 HTTP 处理请求和响应更加灵活;
- 传输的数据不再仅限于文本。 HTTP/1.1
- 增加了 PUT、DELETE 等新的方法;
- 增加了缓存管理和控制;
- 明确了连接管理,允许持久连接;
- 允许响应数据分块(chunked),利于传输大文件;
- 强制要求 Host 头,让互联网主机托管成为可能。 HTTP/2.0
- 二进制协议,不再是纯文本;
- 可发起多个请求,废弃了 1.1 里的管道;(多路复用)
- 使用专用算法压缩头部,减少数据传输量;(头部压缩)
- 允许服务器主动向客户端推送数据;(服务端推送)
- 增强了安全性,“事实上”要求加密通信。 HTTP/3.0
- 基于UDP协议的QUIC协议。图解|为什么 HTTP3.0 使用 UDP 协议?
02 | HTTP是什么?HTTP又不是什么?
- HTTP是什么 HTTP: 超文本传输协议 = 超文本 + 传输 + 协议。
- HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
- HTTP 专门用来在两点之间传输数据,不能用于广播、寻址或路由。
- HTTP 传输的是文字、图片、音频、视频等超文本数据。
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
- HTTP不是什么 HTTP是一个协议,是一种计算机间通信的规范,所以它不存在“单独的实体”。
- HTTP不是互联网
- HTTP不是编程语言
- HTTP不是HTML
- HTTP不是一个孤立的协议
在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。
03 | HTTP世界全览(上):与HTTP相关的各种概念
- 互联网上绝大部分资源都使用 HTTP 协议传输;
- 浏览器是 HTTP 协议里的请求方,即 User Agent;
- 服务器是 HTTP 协议里的应答方,常用的有 Apache 和 Nginx;
- CDN 位于浏览器和服务器之间,主要起到缓存加速的作用;
- 爬虫是另一类 User Agent,是自动访问网络资源的程序。
04 | HTTP世界全览(下):与HTTP相关的各种协议
-
TCP/IP。TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于 IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础。
-
DNS。域名系统,用有意义的名字替代IP地址。
-
URI/URL。统一资源标识符,使用它就能够唯一地标记互联网上资源。URI 主要有三个基本的部分构成:
- 协议名:即访问该资源应当使用的协议,在这里是“http”;
- 主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“nginx.org”;
- 路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/en/download.html”。
-
HTTPS。
HTTP over SSL/TLS-
SSL/TLS,它是一个负责加密通信的安全协议,建立在 TCP/IP 之上,所以也是个可靠的传输协议。
-
SSL 使用了许多密码学最先进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术
-
-
代理。代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。
-
代理有很多种,常见的有:
- 匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;
- 透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;
- 正向代理:靠近客户端,代表客户端向服务器发送请求;
- 反向代理:靠近服务器端,代表服务器响应客户端的请求;
-
代理在传输过程中插入了一个“中间层”,所以可以在这个环节做很多事情,如:
- 负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;
- 内容缓存:暂存上下行的数据,减轻后端的压力;
- 安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;
- 数据处理:提供压缩、加密等额外的功能。
-
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
- TCP/IP 网络分层模型
- 链接层。也叫MAC层,传输单位是帧(frame)。负责在以太网、WiFi 这样的底层网络上发送原始数据包,
- 网际层。IP 协议就处在这一层,传输单位是包(packet)。用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,
- 传输层。是 TCP 协议工作的层次,传输单位是段(segment),职责是保证数据在 IP 地址标记的两点之间“可靠”地传输。
- 应用层。输单位则是消息或报文(message),有各种面向具体应用的协议。例如HTTP、 Telnet、SSH、FTP、SMTP 等等。
- OSI 网络分层模型
- 第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
- 第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
- 第三层:网络层,相当于 TCP/IP 里的网际层;
- 第四层:传输层,相当于 TCP/IP 里的传输层;
- 第五层:会话层,维护网络中的连接状态,即保持会话和同步;
- 第六层:表示层,把数据转换为合适、可理解的语法和语义;
- 第七层:应用层,面向具体的应用传输数据。
- 两个分层模型的映射关系
4. TCP/IP 协议栈的工作方式
凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层。
问题:
- DNS协议在哪一层?应用层
- CDN工作在哪一层?应用层
06 | 域名里有哪些门道?
DNS 是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存。
- 域名的解析 就像 IP 地址必须转换成 MAC 地址才能访问主机一样,域名也必须要转换成 IP 地址,这个过程就是“域名解析”。
- 根域名服务器
- 顶级域名服务器
- 权威域名服务器
- 域名的“新玩法”
-
重定向
-
基于域名实现负载均衡
- 因为域名解析可以返回多个 IP 地址,所以一个域名可以对应多台主机,客户端收到多个 IP 地址后,就可以自己使用轮询算法依次向服务器发起请求,实现负载均衡。
- 域名解析可以配置内部的策略,返回离客户端最近的主机,或者返回当前服务质量最好的主机,这样在 DNS 端把请求分发到不同的服务器,实现负载均衡。