HTTP
HTTP 使用可靠的传输协议,确保在传输过程中不会发生混乱和损坏。它不关心数据传输的具体细节,将联网的细节都交给了通用可靠的 TCP/IP。
TCP
TCP 提供:
无差错的数据传输
按序传输(数据会按顺序到达)
未分段的数据流(可以在任意时刻以任意尺寸将数据传输出去)
URL
URL 告诉你一个资源的位置,以及如何与它交互。它可以通过其他协议来访问因特网上的任意资源。这种访问资源的手段简化了信息访问的过程。
URL 的通用格式:
http://www.hustwenhua.net/ 包括三部分。
第一部分(http)是 URL 方案,告知web客户端如何访问资源(使用HTTP协议)。
第二部分(www.hustwenhua.net)是指服务器位置,告知 web 客户端位于何处。
第三部分(/)是资源路径,说明请求的是哪个资源。
HTTP 报文
常用的 HTTP 方法
方法 | 描述 | 是否包含主体 |
---|---|---|
GET | 从服务器获取一份文档 | 否 |
HEAD | 只从服务器获得文档的首部 | 否 |
POST | 向服务器发送需要处理的数据 | 是 |
PUT | 将请求的主体部分储存在服务器上 | 是 |
TRACE | 对可能经过代理服务器传送到服务器上的报文进行追踪 | 否 |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
DELETE | 从服务器上删除一份文档 | 否 |
常用状态码
整体范围 | 已定义范围 | 分类 |
---|---|---|
100~199 | 100~101 | 信息成功 |
200~299 | 200~206 | 成功 |
300~399 | 300~305 | 重定向 |
400~199 | 400~415 | 客户端错误 |
500~599 | 500~505 | 服务器错误 |
报文的语法包括
方法
请求URL
版本
状态码
原因短语
首部
实体主体部分
HTTP Head
Request Header
Response Header
连接管理
TCP 连接
输入一个 URL 后的执行过程
浏览器解析出主机地址
浏览器查询主机IP地址(DNS)
浏览器获得端口号(80)
浏览器发起到202.43.78.3端口80的连接
浏览器向服务器发送一条 HTTP GET 报文
浏览器从服务器读取 HTTP 响应报文
浏览器关闭连接
TCP 为 HTTP 提供一条可靠的比特传输管道,TCP 会按顺序无差别的承担 HTTP 数据
TCP 流是分段的由 IP 分组传输
HTTP 性能的考虑
HTTP 事务的时延
DNS 解析
建立新的 TCP 连接
传输报文和处理报文
Web 服务器返回 HTTP 响应
常见的 TCP 时延
TCP 连接建立握手
TCP 慢启动拥塞控制
数据聚集的 Nagle 算法
用于捎带确认的 TCP 延时确认算法
TIME_WAIT 时延和端口耗尽
代理
私有代理和共享代理
单个客户端专有的代理称为私有代理,多个客户端共享的代理称为公共代理。
为什么使用代理
- 过滤器
- 文档访问控制
- Web 缓存
- 反向代理
- 内容路由器
- 转码器
- 匿名者
代理 URI 与 服务器 URI 的不同
- 没有设置客户端使用代理时,它会发送部分 URI 来解决这个问题。
- 设置客户端使用代理时,它会发送完整 URI。
通用代理服务器既能处理代理请求,也能处理服务器请求。它既支持部分 URI,又支持完整 URI。
缓存
缓存无法保存所有的文档副本。已有的副本为这些到达缓存的请求提供服务被称为缓存命中。这些缓存的请求没有副本可用,而被转发给原始服务器,这被称为缓存未命中。
网状缓存
- 根据 URL 在父缓存或者原始服务器之间进行动态选择。
- 根据 URL 动态地选择一个特定的父缓存。
- 前往父缓存之前,在本地缓存中搜索已缓存的副本。
- 允许其他缓存对其进行缓存的部分内容进行访问,但不允许因特网通过它们的缓存。
缓存的处理步骤
- 接收:缓存从网络中读取抵达的报文。
- 解析:对报文进行解析,提取出 URL 和各种首部。
- 查询:查看是否有缓存副本可用,如果没有,就获取一份·副本。
- 新鲜度检测:缓存查看已缓存的副本是否新鲜,如果不是,就询问服务器是否有任何更新。
- 创建响应:用新的首部和已缓存的主体来创建一个响应报文。
- 发送:缓存通过网络将响应发回给客户端。
- 日志:创建一个日志文件条目来描述这个事务。
保持副本的新鲜
文档过期
通过特殊的 HTTP 首部 Cache-Control 首部和 Expires 首部,HTTP 让原始服务器向每一个文档附加了一个“缓存日期”。当文档过期时必须与服务器验证文档是否更新,以获得一个新鲜的副本。
使用日期和试用期
Cache-Control:max-age 定义了文档的最大使用期—从文档生成到文档不再新鲜、无法使用为止,最大的合法生存时间(以秒为单位)。
Expires:指定过期日期,如果日期已经过了,说明文档不再新鲜了。
服务再验证
文档到期并不意味着它与服务器活跃状态的文档有区别,只是意味着进行核对的时间了。这种情况被称为“服务器再验证”。如果文档更新,获取新的文件发送给客户端。没有变化,缓存只需要获取新的首部,包括一个新的过期时间,并对缓存的首部更新即可。
用条件方法进行再验证
If-Modified-Since:
If-None-Match:
强弱验证器
不管相关的实体以何种方式发生变化,强实体标签都要发生变化。而相关实体标签发生了比较重要的变化时,弱实体标签才会发生变化。
控制缓存能力
no-Cache 与 on-Store 相应首部
防止缓存提供未经验证的对象。
max-age 相应首部
参考
【1】HTTP 权威指南 人民邮电出版社