HTTP 是基于请求/响应模式的:客户端向服务器发送一个 HTTP 请求,然后服务器将会返回一个 HTTP 响应。Netty 提供了多种编码器和解码器以简化对这个协议的使用。
一个HTTP 请求/响应可能由多个数据部分组成,FullHttpRequest 和FullHttpResponse 消息是特殊的子类型,分别代表了完整的请求和响应。所有类型的 HTTP 消息(FullHttpRequest、LastHttpContent 等等)都实现了 HttpObject 接口。
- HttpRequestEncoder 将 HttpRequest、HttpContent 和 LastHttpContent 消息编码为字节
- HttpResponseEncoder 将 HttpResponse、HttpContent 和 LastHttpContent 消息编码为字节
- HttpRequestDecoder 将字节解码为 HttpRequest、HttpContent 和 LastHttpContent 消息
- HttpResponseDecoder 将字节解码为 HttpResponse、HttpContent 和 LastHttpContent 消息
- HttpClientCodec 和 HttpServerCodec 则将请求和响应做了一个组合。
聚合 HTTP 消息
由于 HTTP 的请求和响应可能由许多部分组成,因此你需要聚合它们以形成完整的消息。为了消除这项繁琐的任务,Netty 提供了一个聚合器 HttpObjectAggregator,它可以将多个消息部分合并为 FullHttpRequest 或者 FullHttpResponse 消息。通过这样的方式,你将总是看到完整的消息内容。
HTTP 压缩
当使用 HTTP 时,建议开启压缩功能以尽可能多地减小传输数据的大小。虽然压缩会带来一些 CPU 时钟周期上的开销,但是通常来说它都是一个好主意,特别是对于文本数据来说。Netty 为压缩和解压缩提供了 ChannelHandler 实现,它们同时支持 gzip 和 deflate 编码。
使用 HTTPS
启用 HTTPS 只需要将 SslHandler 添加到 ChannelPipeline 的 ChannelHandler 组合中。
1、首先实现 Http 服务器并浏览器访问;
2、增加 SSL 控制;
3、实现客户端并访问。