[201209][HTTP 权威指南][陈涓][赵振平][译]

==[201209][HTTP 权威指南][陈涓][赵振平][译]==

第一部分 HTTP : Web 的基础

第 1 章 HTTP 概述

1.1 HTTP - 因特网的多媒体信使

1.2 Web 客户端和服务器

1.3 资源

1.3.1 媒体类型
1.3.2 URI
1.3.3 URL
1.3.4 URN

1.4 事务

1.4.1 方法
1.4.2 状态码
1.4.3 Web 页面中可以包含多个对象

1.5 报文

1.6 连接

1.6.1 TCP/IP
1.6.2 连接、IP地址及端口号
1.6.3 使用 Telnet 实例

1.7 协议版本

1.8 Web 的结构组件

1.8.1 代理
1.8.2 缓存
1.8.3 网关
1.8.4 隧道
1.8.5 Agent 代理

1.9 起始部分的结束语

1.10 更多信息

1.10.1 HTTP 协议信息
1.10.2 历史透视
1.10.3 其他万维网信息

第 2 章 URL 与资源

2.1 浏览因特网资源

2.2 URL 的语法

2.2.1 方案-使用什么协议
2.2.2 主机与端口
2.2.3 用户名和密码
2.2.4 路径
2.2.5 参数
2.2.6 查询字符串
2.2.7 片段

2.3 URL 快捷方式

2.3.1 相对 URL
2.3.2 自动扩展 URL

2.4 各种令人头疼的字符

2.4.1 URL 字符集
2.4.2 编码机制
2.4.3 字符限制
2.4.4 另外一点说明

2.5 方案的世界

2.6 未来展望

第 3 章 HTTP 报文

3.1 报文流

3.1.1 报文流入源端服务器
3.1.2 报文向下游流动

3.2 报文的组成部分

3.2.1 报文的语法
3.2.2 起始行
3.2.3 首部
3.2.4 实体的主体部分
3.2.5 版本 0.9 的报文

3.3 方法

3.3.1 安全方法
3.3.2 GET
3.3.3 HEAD
3.3.4 PUT
3.3.5 POST
3.3.6 TRACE
3.3.7 OPTIONS
3.3.8 DELETE
3.3.9 扩展方法

3.4 状态码

3.4.1 100~199 - 信息性状态码
3.4.2 200~299 - 成功状态码
3.4.3 300~399 - 重定向状态码
3.4.4 400~499 - 客户端错误状态码
3.4.5 500~599 - 服务器错误状态码

3.5 首部

3.5.1 通用首部
3.5.2 请求首部
3.5.3 响应首部
3.5.4 实体首部

3.6 更多信息

第 4 章 连接管理

4.1 TCP 连接

4.1.1 TCP 的可靠数据管道
4.1.2 TCP 流是分段的、由 IP 分组传送
4.1.3 保持 TCP 连接的正确运行
4.1.4 用 TCP 套接字编程

4.2 对 TCP 性能的考虑

4.2.1 HTTP 事务的时延
4.2.2 性能聚焦区域
4.2.3 TCP 连接的握手时延
4.2.4 延迟确认
4.2.5 TCP 慢启动
4.2.6 Nagle 算法与 TCP_NODELAY
4.2.7 TIME_WAIT 累积与端口耗尽

4.3 HTTP 连接的处理

4.3.1 常备误解的 Connection 首部
4.3.2 串行事务处理时延

4.4 并行连接

4.4.1 并行连接可能会提高页面的加载速度
4.4.2 并行连接不一定更快
4.4.3 并行连接可能让人“感觉”更快一些

4.5 持久连接

4.5.1 持久以及并行连接
4.5.2 HTTP/1.0+ keep-alive 连接
4.5.3 Keep-Alive 操作
4.5.4 Keep-Alive 选项
4.5.5 Keep-Alive 连接的限制和规则
4.5.6 Keep-Alive 和哑代理
4.5.7 插入 Proxy-Connection
4.5.8 HTTP/1.1 持久连接
4.5.9 持久连接的限制和规则

4.6 管道化连接

4.7 关闭连接的奥秘

4.7.1 “任意”解除连接
4.7.2 Content-Length 及截尾操作
4.7.3 连接关闭容限、重试以及幂等性
4.7.4 正常关闭连接

4.8 更多信息

4.8.1 HTTP 连接
4.8.2 HTTP 性能问题
4.8.3 TCP/IP

第二部分 HTTP 结构

第 5 章 Web 服务器

5.1 各种形状和尺寸的 Web 服务器

5.1.1 Web 服务器的实现
5.1.2 通用软件 Web 服务器
5.1.3 Web 服务器设备
5.1.4 嵌入式 Web 服务器

5.2 最小的 Perl Web 服务器

5.3 实际的 Web 服务器会做什么

5.4 第一步-接受客户端连接

5.4.1 处理新连接
5.4.2 客户端主机名识别
5.4.3 通过 ident 确定客户端用户

5.5 第二步-接收请求报文

5.5.1 报文的内部表示法
5.5.2 连接的输入/输出处理结构

5.6 第三步-处理请求

5.7 第四步-对资源的映射及访问

5.7.1 docroot
5.7.2 目录列表
5.7.3 动态内容资源的映射
5.7.4 服务器端包含项
5.7.5 访问控制

5.8 第五步-构建响应

5.8.1 响应实体
5.8.2 MIME 类型
5.8.3 重定向

5.9 第六步-发送响应

5.10 第十步-记录日志

5.11 更多信息

第 6 章 代理

6.1 Web 的中间实体

6.1.1 私有和共享代理
6.1.2 代理与网关的对比

6.2 为什么使用代理

6.3 代理会去往何处

6.3.1 代理服务器的部署
6.3.2 代理的层次结构
6.3.3 代理是如何获取流量的

6.4 客户端的代理设置

6.4.1 客户端的代理配置:手工配置
6.4.2 客户端代理配置:PAC 文件
6.4.3 客户端代理配置:WPAD

6.5 与代理请求有关的一些棘手问题

6.5.1 代理 URI 与服务器 URI 的不同
6.5.2 与虚拟主机一样的问题
6.5.3 拦截代理会收到部分 URI
6.5.4 代理既可以处理代理请求,也可以处理服务器请求
6.5.5 转发过程中对 URI 的修改
6.5.6 URI 的客户端自动扩展和主机名解析
6.5.7 没有代理时 URI 的解析
6.5.8 有显示代理时 URI 的解析
6.5.9 有拦截代理时 URI 的解析

6.6 追踪报文

6.6.1 Via 首部
6.6.2 TRACE 方法

6.7 代理认证

6.8 代理的互操作性

6.8.1 处理代理不支持的首部和方法
6.8.2 OPTIONS:发现对可选特性的支持
6.8.3 Allow 首部

6.9 更多信息

第 7 章 缓存

7.1 冗余的数据传输

7.2 带宽瓶颈

7.3 瞬间拥塞

7.4 距离时延

7.5 命中和未命中的

7.5.1 再验证
7.5.2 命中率
7.5.3 字节命中率
7.5.4 区分命中和未命中的情况

7.6 缓存的拓扑结构

7.6.1 私有缓存
7.6.2 公有代理缓存
7.6.3 代理缓存的层次结构
7.6.4 网状缓存、内容路由以及对等缓存

7.7 缓存的处理步骤

7.7.1 第一步-接收
7.7.2 第二步-解析
7.7.3 第三步-查找
7.7.4 第四步-新鲜度检测
7.7.5 第五步-创建响应
7.7.6 第六步-发送
7.7.7 第七步-日志
7.7.8 缓存处理流程图

7.8 保持副本的新鲜

7.8.1 文档过期
7.8.2 过期日期和使用期
7.8.3 服务器再验证
7.8.4 用条件方法进行再验证
7.8.5 If-Modified-Since:Date 再验证
7.8.6 If-None-Match:实体标签再验证
7.8.7 强弱验证器
7.8.8 什么时候应该使用实体标签和最近修改日期

7.9 控制缓存的能力

7.9.1 no-Store 与 no-Cache 响应首部
7.9.2 max-age 响应首部
7.9.3 Expires 响应首部
7.9.4 must-revalidate 响应首部
7.9.5 试探性过期
7.9.6 客户端的新鲜度限制
7.9.7 注意事项

7.10 设置缓存控制

7.10.1 控制 Apache 的 HTTP 首部
7.10.2 通过 HTTP-EQUIV 控制 HTML 缓存

7.11 详细算法

7.11.1 使用期和新鲜生存期
7.11.2 使用期的计算
7.11.3 完整的使用期计算算法
7.11.4 新鲜生存期计算
7.11.5 完整的服务器-新鲜度算法

7.12 缓存和广告

7.12.1 发布广告者的两难处境
7.12.2 发布者的响应
7.12.3 日志迁移
7.12.4 命中计数和使用限制

7.13 更多信息

第 8 章 集成点:网关、隧道及中继

8.1 网关

8.2 协议网关

8.2.1 HTTP/* : 服务器端 Web 网关
8.2.2 HTTP/HTTPS : 服务器端安全网关
8.2.3 HTTPS/HTTP 客户端安全加速器网关

8.3 资源网关

8.3.1 CGI
8.3.2 服务器扩展 API

8.4 应用程序接口和 Web 服务

8.5 隧道

8.5.1 用 CONNECT 建立 HTTP 隧道
8.5.2 数据隧道、定时及连接管理
8.5.3 SSL 隧道
8.5.4 SSL 隧道与 HTTP/HTTPS 网关的对比
8.5.5 隧道认证
8.5.6 隧道的安全性考虑

8.6 中继

8.7 更多信息

第 9 章 Web 机器人

9.1 爬虫及爬行方式

9.1.1 从哪儿开始:根集
9.1.2 链接的提取以及相对链接的标准化
9.1.3 避免环路的出现
9.1.4 循环与复制
9.1.5 面包屑留下的痕迹
9.1.6 别名与机器人环路
9.1.7 规范化 URL
9.1.8 文件系统连接环路
9.1.9 动态虚拟 Web 空间
9.1.10 避免循环和重复

9.2 机器人的 HTTP

9.2.1 识别请求首部
9.2.2 虚拟主机
9.2.3 条件请求
9.2.4 对响应的处理
9.2.5 User-Agent 导向

9.3 行为不当的机器人

9.4 拒绝机器人访问

9.4.1 拒绝机器人访问标准
9.4.2 Web 站点和 robots.txt 文件
9.4.3 robots.txt 文件的格式
9.4.4 其他有关 robots.txt 的知识
9.4.5 缓存和 robots.txt 的过期
9.4.6 拒绝机器人访问的 Perl 代码
9.4.7 HTML 的 robot-control 元标签

9.5 机器人的规范

9.6 搜索引擎

9.6.1 大格局
9.6.2 现代搜索引擎结构
9.6.3 全文索引
9.6.4 发布查询请求
9.6.5 对结果进行排序,并提供查询结果
9.6.6 欺诈

9.7 更多信息

第 10 章 HTTP-NG

10.1 HTTP 发展中存在的问题

10.2 HTTP-NG 的活动

10.3 模块化及功能增强

10.4 分布式对象

10.5 第一层-报文传输

10.6 第二层-远程调用

10.7 第三层-Web 应用

10.8 WebMUX

10.9 二进制连接协议

10.10 当前的状态

10.11 更多信息

第三部分 识别、认证与安全

11.1 个性化接触

11.2 HTTP 首部

11.3 客户端 IP 地址

11.4 用户登录

11.5 胖 URL

11.6.6 cookies 版本0(Netscape)
11.6.7 cookies 版本1(RFC 2965)
11.6.10 cookie、安全性和隐私

11.7 更多信息

第 12 章 基本认证机制

12.1 认证

12.1.1 HTTP 的质询/响应认证框架
12.1.2 认证协议与首部
12.1.3 安全域

12.2 基本认证

12.2.1 基本认证实例
12.2.2 Base-64 用户名/密码编码
12.2.3 代理认证

12.3 基本认证的安全缺陷

12.4 更多信息

第 13 章 摘要认证

13.1 摘要认证的改进

13.1.1 用摘要保护密码
13.1.2 单向摘要
13.1.3 用随机数防止重放攻击
13.1.4 摘要认证的握手机制

13.2 摘要的计算

13.2.1 摘要算法的输入数据
13.2.2 算法 H(d) 和 KD(s,d)
13.2.3 与安全性相关的数据(A1)
13.2.4 与报文有关的数据(A2)
13.2.5 摘要算法总述
13.2.6 摘要认证会话
13.2.7 预授权
13.2.8 随机数的选择
13.2.9 对称认证

13.3 增强保护质量

13.3.1 报文完整性保护
13.3.2 摘要认证首部

13.4 应该考虑的实际问题

13.4.1 多重质询
13.4.2 差错处理
13.4.3 保护空间
13.4.4 重写 URI
13.4.5 缓存

13.5 安全性考虑

13.5.1 首部篡改
13.5.2 重放攻击
13.5.3 多重认证机制
13.5.4 词典攻击
13.5.5 恶意代理攻击和中间人攻击
13.5.6 选择明文攻击
13.5.7 存储密码

13.6 更多信息

第 14 章 安全 HTTP

14.1 保护 HTTP 的安全

14.2 数字加密

14.2.1 密码编制的机制与技巧
14.2.2 密码
14.2.3 密码机
14.2.4 使用了密钥的密码
14.2.5 数字密码

14.3 对称密钥加密技术

14.3.1 密钥长度与枚举攻击
13.3.2 建立共享密钥

14.4 公开密钥加密技术

14.4.1 RSA
14.4.2 混合加密系统和会话密钥

14.5 数字签名

14.6 数字证书

14.6.1 证书的主要内容
14.6.2 X.509 v3 证书
14.6.3 用证书对服务器进行认证

14.7 HTTPS - 细节介绍

14.7.1 HTTPS 概述
14.7.2 HTTPS 方案
14.7.3 建立安全传输
14.7.4 SSL 握手
14.7.5 服务器证书
14.7.6 站点证书的有效性
14.7.7 虚拟主机与证书

14.8 HTTPS 客户端实例

14.8.1 OpenSSL
14.8.2 简单的 HTTPS 客户端
14.8.3 执行 OpenSSL 客户端

14.9 通过代理以隧道形式传输安全流量

14.10 更多信息

14.10.1 HTTP 安全性
14.10.2 SSL 与 TLS
14.10.3 公开密钥基础设施
14.10.4 数字密码

第四部分 实体、编码和国际化

第 15 章 实体和编码

15.1 报文是箱子,实体是货物

15.2 Content-Length:实体的大小

15.2.1 检测截尾
15.2.2 错误的 Content-Length
15.2.3 Content-Length 与持久连接
15.2.4 内容编码
15.2.5 确定实体主体长度的规则

15.3 实体摘要

15.4 媒体类型和字符集

15.4.1 文本的字符编码
15.4.2 多部分媒体类型
15.4.3 多部分表格提交
15.4.4 多部分范围响应

15.5 内容编码

15.5.1 内容编码过程
15.5.2 内容编码类型
15.5.3 Accept-Encoding 首部

15.6 传输编码和分块编码

15.6.1 可靠传输
15.6.2 Transfer-Encoding 首部
15.6.3 分块编码
15.6.4 内容编码与传输编码的结合
15.6.5 传输编码的规则

15.7 随时间变化的实例

15.8 验证码和新鲜度

15.8.1 新鲜度
15.8.2 有条件的请求与验证码

15.9 范围请求

15.10 差异编码

15.11 更多信息

第 16 章 国际化

16.1 HTTP 对国际性内容的支持

16.2 字符集与 HTTP

16.2.1 字符集是把字符转换为二进制码的编码
16.2.2 字符集和编码如何工作
16.2.3 字符集不对,字符就不对
16.2.4 标准化的 MIME charset 值
16.2.5 Content-Type 首部和 Charset 首部以及 META 标志
16.2.6 Accept-Charset 首部

16.3 多语言字符编码入门

16.3.1 字符集术语
16.3.2 字符集的命名很糟糕
16.3.3 字符
16.3.4 字形、连笔以及表示形式
16.3.5 编码后的字符集
16.3.6 字符编码方案

16.4 语言标记与 HTTP

16.4.1 Content-Language 首部
16.4.2 Accept-Language 首部
16.4.3 语言标记的类型
16.4.4 子标记
16.4.5 大小写
16.4.6 IANA 语言标记注册
16.4.7 第一个子标记-名字空间
16.4.8 第二个子标记-名字空间
16.4.9 其余子标记-名字空间
16.4.10 配置和语言有关的首选项
16.4.11 语言标记参考表

16.5 国际化的 URI

16.5.1 全球性的可转抄能力与有意义的字符的较量
16.5.2 URI 字符集合
16.5.3 转义和反转义
16.5.4 转义国际化字符
16.5.5 URI 的模态切换

16.6 其他需要考虑的地方

16.6.1 首部和不合规范的数据
16.6.2 日期
16.6.3 域名

16.7 更多信息

16.7.1 附录
16.7.2 互联网的国际化
16.7.3 国际标准

第 17 章 内容协商与转码

17.1 内容协商技术

17.2 客户端驱动的协商

17.3 服务器驱动的协商

17.3.1 内容协商首部集
17.3.2 内容协商首部中的质量值
17.3.3 随其他首部集而变化
17.3.4 Apache 中的内容协商
17.3.5 服务器端扩展

17.4 透明协商

17.4.1 进行缓存与备用候选
17.4.2 Vary 首部

17.5 转码

17.5.1 格式转换
17.5.2 信息综合
17.5.3 内容注入
17.5.4 转码与静态预生成的对比

17.6 下一步计划

17.7 更多信息

第五部分 内容发布与分发

第 18 章 Web 主机托管

18.1 主机托管服务

18.2 虚拟主机托管

18.2.1 虚拟服务器请求缺乏主机信息
18.2.2 设法让虚拟主机托管正常工作
18.2.3 HTTP/1.1 的 Host 首部

18.3 使网站更可靠

18.3.1 镜像的服务器集群
18.3.2 内容分发网络
18.3.3 CDN 中的反向代理缓存
18.3.4 CDN 中的代理缓存

18.4 让网站更快

18.5 更多信息

第 19 章 发布系统

19.1 FrontPage 为支持发布而做的服务器扩展

19.1.1 FrontPage 服务器扩展
19.1.2 FrontPage 术语表
19.1.3 FrontPage 的 RPC 协议
19.1.4 FrontPage 的安全模型

19.2 WebDAV 与协作写作

19.2.1 WebDAV 的方法
19.2.2 WebDAV 与 XML
19.2.3 WebDAV 首部集
19.2.4 WebDAV 的锁定与防止覆写
19.2.5 LOCK 方法
19.2.6 UNLOCK 方法
19.2.7 属性和元数据
19.2.8 PROPFIND 方法
19.2.9 PROPPATCH 方法
19.2.10 集合与名字空间管理
19.2.11 MKCOL 方法
19.2.12 DELETE 方法
19.2.13 COPY 与 MOVE 方法
19.2.14 增强的 HTTP/1.1 方法
19.2.15 WebDAV 中的版本管理
19.2.16 WebDAV 的未来发展

19.3 更多信息

第 20 章 重定向与负载均衡

20.1 为什么要重定向

20.2 重定向到何地

20.3 重定向协议概览

20.4 通用的重定向方法

20.4.1 HTTP 重定向
20.4.2 DNS 重定向
20.4.3 任播寻址
20.4.4 IP MAC 转发
20.4.5 IP 地址转发
20.4.6 网元控制协议

20.5 代理的重定向方法

20.5.1 显示浏览器配置
20.5.2 代理自动配置
20.5.3 Web 代理自动发现协议

20.6 缓存重定向方法

20.7 因特网缓存协议

20.8 缓存阵列路由协议

20.9 超文本缓存协议

20.9.1 HTCP 认证
20.9.2 设置缓存策略

20.10 更多信息

第 21 章 日志记录与使用情况跟踪

21.1 记录内容

21.2 日志格式

21.2.1 常见日志格式
21.2.2 组合日志格式
21.2.3 网景扩展日志格式
21.2.4 网景扩展2日志格式
21.2.5 Squid 代理日志格式

21.3 命中率测量

21.3.1 概述
21.3.2 Meter 首部

21.4 关于隐私的考虑

21.5 更多信息

第六部分 附录

附录 A URI 方案

附录 B HTTP 状态码

B.1 状态码分类

B.2 状态码

附录 C HTTP 首部参考

附录 D MIME 类型

D.1 背景知识

D.2 MIME 类型结构

D.2.1 离散类型
D.2.2 复合类型
D.2.3 多部分类型
D.2.4 语法

D.3 在 IANA 注册 MIME 类型

D.3.1 注册树
D.3.2 注册过程
D.3.3 注册规则
D.3.4 注册模板
D.3.5 MIME 媒体类型注册

D.4 MIME 类型表

D.4.1 application/*
D.4.2 audio/*
D.4.3 chemical/*
D.4.4 image/*
D.4.5 message/*
D.4.6 model/*
D.4.7 multipart/*
D.4.8 text/*
D.4.9 video/*
D.4.10 实验类型

附录 E Base-64 编码

E.1 Base-64 编码保证了二进制数据的安全

E.2 8位到6位

E.3 Base-64 填充

E.4 Perl 实现

E.5 更多信息

附录 F 摘要认证

F.1 摘要 WWW-Authenticate 指令

F.2 摘要 Authorization 指令

F.3 摘要 Authentication-Info 指令

F.4 参考代码

F.4.1 文件 digcalc.h
F.4.2 文件 “digcalc.c”
F.4.3 文件 digtest.c

附录 G 语言标记

G.1 第一个子标记所用规则

G.2 第二个子标记所用规则

G.3 IANA 已注册的语言标记

G.4 ISO 639 语言代码

G.5 ISO 3166 国家代码

G.6 语言管理组织

附录 H MIME 字符集注册表

H.1 MIME 字符集注册表

H.2 首选 MIME 名

H.3 已注册字符集

索引

关于作者

尾页

你可能感兴趣的:(#,网络,HTTP)