HttpCore 教程
南磊 译
目录
前言................................................................................................................................. 4
1. HttpCore 范围 ........................................................................................................ 4
2. HttpCore 目标 ........................................................................................................ 4
3. 什么是 HttpCore 不能做的 ..................................................................................... 4
关于翻译.......................................................................................................................... 4
第一章 基础 .................................................................................................................... 5
1.1 HTTP 报文 ............................................................................................................ 5
1.1.1 结构 .......................................................................................................... 5
1.1.2 基本操作 ................................................................................................... 5
1.1.3 HTTP 实体 .................................................................................................. 8
1.1.4 创建实体 ................................................................................................... 9
1.2 阻塞 HTTP 连接 ................................................................................................. 12
1.2.1 使用阻塞的 HTTP 连接 ............................................................................. 13
1.2.2 内容传输与阻塞 I/O ................................................................................. 14
1.2.3 支持的内容传输机制 ............................................................................... 14
1.2.4 终止 HTTP 连接........................................................................................ 15
1.3 HTTP 异常处理 ................................................................................................... 15
1.3.1 协议异常 ................................................................................................. 15
1.4 HTTP 协议处理器................................................................................................ 15
1.4.1 标准协议拦截器 ...................................................................................... 16
1.4.2 使用协议处理器 ...................................................................................... 17
1.4.3 HTTP 上下文 ............................................................................................. 18
1.5 HTTP 参数 .......................................................................................................... 19
1.5.1 HTTP 参数 bean ........................................................................................ 20
1.6 阻塞 HTTP 协议处理程序 ................................................................................... 20
1.6.1 HTTP 服务 ................................................................................................ 20
1.6.2 HTTP 请求执行器 ...................................................................................... 22
1.6.3 连接持久化/重用 ..................................................................................... 23
第二章 NIO 的扩展......................................................................................................... 24
2.1 非阻塞 I/O 模型的优点和缺点............................................................................ 24
2.2 和其它 NIO 框架的差异 ..................................................................................... 24
2.3 I/O 反应器 ......................................................................................................... 24
2.3.1 I/O 分发器 ................................................................................................ 24
2.3.2 I/O 反应器关闭 ......................................................................................... 25
2.3.3 I/O 会话 ................................................................................................... 25
2.3.4 I/O 会话状态管理 ..................................................................................... 25
2.3.5 I/O 会话事件掩码 ..................................................................................... 26
2.3.6 I/O 会话缓冲 ............................................................................................ 26
2.3.7 I/O 会话关闭 ............................................................................................ 26
2.3.8 监听 I/O 反应器 ....................................................................................... 27
2.3.9 连接 I/O 反应器 ....................................................................................... 27
2.3.10 I/O 兴趣点集合操作的队列...................................................................... 29
2.4 I/O 反应器异常处理 ........................................................................................... 29
2.4.1 I/O 反应器审计日志 .................................................................................. 30
2.5 非阻塞的 HTTP 连接 .......................................................................................... 31
2.5.1 非阻塞 HTTP 连接的执行上下文 ............................................................... 31
2.5.2 使用非阻塞的 HTTP 连接.......................................................................... 31
2.5.3 HTTP I/O 控制 ........................................................................................... 32
2.5.4 非阻塞内容传输 ...................................................................................... 33
2.5.5 支持的非阻塞内容转换机制 ..................................................................... 34
2.5.6 直接通道 I/O ........................................................................................... 34
2.6 HTTP 1/O 事件分发器 ......................................................................................... 35
2.7 非阻塞 HTTP 实体.............................................................................................. 36
2.7.1 内容消耗非阻塞 HTTP 实体 ...................................................................... 37
2.7.2 内容生成非阻塞 HTTP 实体 ...................................................................... 38
2.8 非阻塞 HTTP 协议处理程序................................................................................ 39
2.8.1 异步的 HTTP 服务处理程序 ...................................................................... 39
2.8.2 异步的 HTTP 客户端处理程序................................................................... 42
2.8.3 兼容阻塞 I/O ........................................................................................... 44
2.8.4 连接事件监听器 ...................................................................................... 45
2.9 非阻塞的 TLS/SSL............................................................................................... 45
2.9.1 SSL I/O 会话 .............................................................................................. 45
2.9.2 SSL I/O 事件分发 ....................................................................................... 47
第三章 高级主题 ........................................................................................................... 48
3.1 HTTP 报文解析和格式化框架 .............................................................................. 48
3.1.1 HTTP 的行解析和格式化 ........................................................................... 48
3.1.2 HTTP 报文流和会话 I/O 缓冲 ..................................................................... 50
3.1.3 HTTP 报文解析器和格式化 ........................................................................ 51
3.1.4 HTTP 头部解析需求 .................................................................................. 53
3.2 自定义 HTTP 连接.............................................................................................. 53
前言
HttpCore 是一套实现了 HTTP 协议最基础方面的组件,尽管 HTTP 协议在使用最小占用
来开发全功能的客户端和服务器的 HTTP 服务是足够的。
HttpCore 有如下的范围和目标:
1. HttpCore 范围
构建客户端/代理/服务器端 HTTP 服务一致的 API
构建同步和异步 HTTP 服务一致的 API
基于阻塞(经典的)和非阻塞(NIO)I/O 模型的一套低等级组件
2. HttpCore 目标
实现最基本的 HTTP 传输方面
良好性能和清晰度&表现力之间的平衡
小的(预测)内存占用
自我包含的类库(没有超越 JRE 的额外依赖)
3. 什么是 HttpCore 不能做的
HttpClient 的替代
Servlet 容器或 Servlet API 竞争对手的替代
关于翻译
本文档翻译工作由南磊完成,版权归译者所有。免费发布,但是不可擅自用于任何与商
业有关的用途。若对翻译质量有任何意见或建议,可以联系译者 nanlei1987@gmail.com 。
英文原版由 Oleg Kalnichevski 所著,若对 HttpCore 本身有问题的可以直接反馈到 Apache 官
网 HttpCore 项目组。
第一章 基础
1.1 HTTP 报文
1.1.1 结构
HTTP 报文由头部和可选的内容体构成。HTTP 请求报文的头由请求行和头部字段的集合
构成。HTTP 响应报文的头部由状态行和头部字段的集合构成。所有 HTTP 报文必须包含协议
版本。一些 HTTP 报文可选地可以包含内容体。
HttpCore 定义了 HTTP 报文对象模型,它紧跟定义,而且提供对 HTTP 报文元素进行序
列化(格式化)和反序列化(解析)的支持。
1.1.2 基本操作
1.1.2.1 HTTP 请求报文
HTTP 请求是由客户端向服务器端发送的报文。报文的第一行包含应用于资源的方法,
资源的标识符,和使用的协议版本。
输出内容为:
1.1.2.2 HTTP 响应报文
HTTP 响应是由服务器在收到和解释请求报文之后发回客户端的报文。报文的第一行包
含了协议的版本,之后是数字状态码和相关的文本段。
HttpRequest request = new BasicHttpRequest("GET", "/",
HttpVersion.HTTP_1_1);
System.out.println(request.getRequestLine().getMethod());
System.out.println(request.getRequestLine().getUri());
System.out.println(request.getProtocolVersion());
System.out.println(request.getRequestLine().toString());
GET
/
HTTP/1.1
GET / HTTP/1.1