诞生
- HTTP/0.9 只允许 GET,纯文本格式(无版本号,后追加为 0.9)
HTTP/1.0 (RFC1945,不是标准,只是参考文档)
- 增加 HEAD、POST 等新方法
- 增加响应状态码,标记可能的错误原因
- 引入协议版本号概念
- 引入 HTTP Header 概念,让 HTTP 处理请求和响应更加灵活
- 传输的数据不再仅限于文本
HTTP/1.1 (RFC2616)
- 增加了 PUT、DELETE 等新的方法
- 增加了缓存管理和控制
- 明确了连接管理,允许持久连接
- 允许响应数据分块(chunked),利于传输大文件
- 强制要求 Host 头,让互联网主机托管成为可能
- HTTP/2 (RFC7540)
以 Google SPDY 协议为基础定制。HTTP/2 还衍生出了 gRPC 等新协议,但目前大多数网站仍在使用 HTTP/1.1
- 二进制协议,不再是纯文本
- 可发起多个请求,废弃了 1.1 的管道
- 使用专用算法压缩头部,减少数据传输量
- 允许服务器主动向客户端推送数据
- 增强了安全性,“事实上”要求加密通信
- HTTP/3
Google 推出的 QUIC 更名而来
HTTP 是什么
HyperText Transfer Protocol
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
- 协议:使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式
- 传输:双向协议,用来在两点之间传输数据的约定和规范
- 超文本:文本广义为图片、音频、视频、甚至压缩包,超文本关键是超链接,形成杜查非线性、网状的结构关系。
HTTP 不是一个孤立的协议,通常泡在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。也有一些协议依赖于 HTTP,如 WebSocket、HTTPDNS 等。
HTTP 相关概念
代理
- 匿名代理:完全隐匿了被代理的机器,外界看到的 只是代理服务器
- 透明代理:传输过程中“透明开放”,外界既知道代理也知道客户端
- 正向代理:靠近客户端,代表客户端向服务器发送请求
- 方向代理:靠近服务器端,代表服务器响应客户端的请求
TCP/IP 网络分层模型
- 链接层(link layer, MAC)
- 网际层(Internet layer,IP)
- 传输层(transport layer,TCP/UDP)
- 应用层(application layer,Telnet、SSh、FTP、SMTP、HTTP)
OSI
(Open System Interconnection Reference Model,开放式系统互联通信参考模型)网络分层模型
- 物理层,电缆、光纤、网卡、集线器等
- 数据链路层,TCP/IP 的链接层
- 网络层,TCP/IP 的网际层
- 传输层, TCP/IP 的传输层
- 会话层,维护网络中的连接状态,即保持会话和同步
- 表示层,把数据准换位合适、可以理解的语法和语义
- 应用层,面向具体的应用传输数据
域名
- 形式:主机名[.二级域名].顶级域名
域名解析
DNS 核心系统是一个三层的树状、分布式服务,基本对应域名的结构:- 根域名服务器(Root DNS Server):管理顶级域名服务器,返回 com、net、cn 等顶级域名服务器的 IP
- 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,如 com 顶级域名服务器可以 返回 apple.com 域名服务器的 IP
- 权威域名服务器(Authoritative):管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.apple.com 的 IP
DNS 缓存
- 大公司、网络运营商的 DNS 服务器(非权威域名服务器),作为用户 DNS 查询的代理,代替用户访问核心 DNS 系统,离用户较近
- 操作系统也会对 DNS 解析结果做缓存,操作系统还存在“主机映射”文件(hosts)
域名应用
- 重定向:域名不变, IP 任意变动
- 名字空间:搭建内部 DNS 作为名字服务器,实现 blog.cellinlab.xyz 、api.cellinlab.xyz 等
负载均衡:
- 域名解析返回多个 IP
- 域名解析配置内部策略,返回离客户端最近或当前服务最优的主机
- 域名屏蔽:对域名不解析,返回错误,让用户无法拿到 IP,从而无法访问
- 域名劫持(域名污染):访问 A,DNS 给用户 B 的 IP
- 域名总长度限制在 253 字符内,一级域名不能超过 63 个字符
- 域名是大小写无关的,但通常使用小写形式