一、 HTTP 的发展史
相关的核心技术
- URI: 统一资源标识符, 是互联网资源的唯一身份
- HTML: 超文本标记语言, 描述文本信息
- HTTP: 超文本传输协议, 用来传输超文本
HTTP/0.9
这一时期的HTTP在后来被定为0.9版本, 采用的是纯文本格式, 只允许从服务器"GET" HTML文档, 并且响应请求以后就关闭连接, 功能非常简单
HTTP/1.0
1.0版本的HTTP已经与我们现在的差别不大了, 但是这个时候的HTTP还只是一份参考文档,并没有实际的约束力. 主要完善了一下功能:
- 增加了HEAD, POST等新方法
- 增加了响应状态码, 标记出错原因
- 引入了协议版本号的概念
- 引入了HTTP Header的概念, 让请求和响应更加灵活
- 传输的数据不再仅限于文本
HTTP/1.1
1.1的版本对1.0做了小幅度的修正, 但他已经成为一个正式的标准, 只要用到HTTP协议, 就必须严格遵守这个标准. 主要变更点有:
增加了PUT, DELETE等方法 (RESTFUL的应用)
增加了缓存管理和控制
明确了连接管理, 允许持久连接
允许响应数据分块, 利于传输大文件
强制要求HOST头
HTTP/2
2.0的定制已经充分考虑了互联网的现状, 在高度兼容1.1的同时, 在性能改善方面做了很大的努力, 主要特点有:
- HTTP/2的语义与HTTP/1.1保持完全一致: 比如协议名,请求方法,URI,状态码, 头部字段等都不变, 这样用户就可以无缝升级
- 头部压缩: 开发了专门的头部压缩算法, 在客户端和服务器建立字典, 使用索引来标记重复字符串
- 二进制格式: HTTP/1 中使用的是纯文本的报文, HTTP/2则改为了二进制格式, 这样虽然不易读, 但是大大方便了计算机解析
- 虚拟的流: HTTP/2 定义了流的概念, 将消息按帧进行发送, 使用一个链接处理多个往返通信, 也就是"多路复用". 这样就解决了队头阻塞的问题, 提高了链接的利用率, 降低了延迟. 同时服务器也可以通过流主动的给客户端推送消息
- 强化安全: 底层使用了TLS1.25, 废弃了很多弱密码套件
二、HTTP是什么?
众所周知, HTTP 是超文本传输协议, 那么怎么具体去理解超文本传输协议呢?
-
协议: HTTP是确定计算机之间交流通信、控制、错误处理的规范
-
传输: HTTP主要作用与互联网两点之间的数据传输
- 双向: 两点之间的数据传输是双向的
- 多段: 两点直接的传输是可以有其他'中间人'接力、中转
-
超文本: HTTP传输的数据是文本、图片、音视频、超链接等的混合体
所以综上所述: HTTP是在互联网中,为两点之间传输文字、图片、音视频等超文本数据的约定和规范
三、 HTTP相关的概念/协议
-
浏览器: 浏览器叫做"Web Browser", 在HTTP协议里, 浏览器的角色是"User Agent", 即"用户代理". 意思是作为访问者发起HTTP请求, 通常我们会成为"客户端"
-
Web服务器: 浏览器发起HTTP请求, 那么作为响应方我们叫做服务器(Web Server)
- 硬件层面: 大多数情况就是指一台服务器(计算机),或者是云服务器, 集群等
- 软件层面: 可以提供Web服务的应用程序, 例如 Apache, Nginx等
-
CDN: CDN是在客户端和服务器之间的一个节点, 他可以缓存数据, 可以让浏览器的请求在半路就可以获取响应, 优秀的CDN调度算法可以找到离用户最近的节点, 大幅度的缩短响应时间
-
Web Service: 区别于Web Server, Web Service是一个基于Web的服务架构技术. Service是网络服务实体, Serve是网络服务器, 后者是前者的承载
-
TCP/IP: TCP/IP是一系列网络通信协议的统称, 核心的2个协议就是TCP和IP.
- IP协议: 属于"网际层", 主要是解决路由和寻址的问题. 用IP地址来定位每一台设备
- TCP协议: 属于"传输层", 主要负责传输控制, 他位于IP协议之上, 基于IP协议提供可靠的字节流通信. "可靠"表示数据不丢失, "字节流"表示数据完整
-
DNS: 指域名系统, 用简单好记的单词来映射复杂的IP地址. 这个映射的过程被称为"域名解析"
-
URI: 统一资源标识符, 可以唯一的标记互联网资源
-
URL: URI的一种常用表现形式, 统一资源定位符, 是URI的一个子集
-
HTTPS: 运行在SSL/TLS协议之上的HTTP, SSL/TLS 负责加密通信
-
代理: 代理是客户端和服务器中间的一个环节, 可以转发客户端的请求, 也可以转发服务器的响应
- 匿名代理: 隐藏起来的代理机器, 外界只能看到代理服务器
- 透明代理: 外界既知道代理, 也知道客户端
- 正向代理: 靠近客户端, 代表客户端想服务器发送请求
- 反向代理: 靠近服务端, 代表服务器响应请求
四、 网络分层模型
1. TCP/IP 网络分层模型
- 链接层(帧): 负责发送原始数据包, 工作在网卡的层次, 使用MAC地址来标记网络设备
- 网际层(包):IP协议就在这一层, 用IP地址代替MAC地址, 连接整个互联网
- 传输层(段):TCP(UDP)在这一层工作, 保证数据在2个IP地址之间"可靠"的传输
- 应用层(报文): 面向SSH, HTTP, FTP等应用协议
2. OSI 网络分层模型
- 物理层: 网络的物理形式, 光线, 网卡等
- 数据链路层:相当于TCP/IP 里的链接层
- 网络层:相当于TCP/IP 里的网际层
- 传输层:相当于TCP/IP 里的传输层
- 会话层:维护网络中的链接状态
- 表示层: 将数据转换为合适,可理解的语法/语义
- 应用层:面向具体的应用传输
五、 域名
-
出现原因: 因为IP地址的复杂/无序, 很难被记住, 所以就出现了更好记的"域名"
-
组成: 主机名.二级域名.顶级域名
-
DNS服务器: 树状的分布式查询系统+多级缓存
- 根域名服务器: 管理顶级域名服务器, 返回 com, cn, net 等顶级域名服务器的地址
- 顶级域名服务器: 管理自己域名下的权威域名服务器, 返回 apple.com 等域名服务器地址
- 权威域名服务器: 管理自己域名下主机的IP地址, 返回 www.apple.com的IP地址
-
DNS域名解析: 将域名转换成IP地址的过程
-
解析过程: 浏览器缓存 -> 系统缓存 -> Hosts文件 -> DNS服务器(根域名服务器 -> 顶级域名服务器 -> 权威域名服务器)