HTTP 是基于请求/响应模式的:客户端向服务器发送一个 HTTP 请求,然后服务器将会返回一个 HTTP 响应。Netty 提供了多种编码器和解码器以简化对这个协议的使用。
image.png
一个HTTP 请求/响应可能由多个数据部分组成,FullHttpRequest 和FullHttpResponse 消息是特殊的子类型,分别代表了完整的请求和响应。所有类型的 HTTP 消息(FullHttpRequest、LastHttpContent 等等)都实现了 HttpObject 接口。

  • HttpRequestEncoder 将 HttpRequest、HttpContent 和 LastHttpContent 消息编码为字节
  • HttpResponseEncoder 将 HttpResponse、HttpContent 和 LastHttpContent 消息编码为字节
  • HttpRequestDecoder 将字节解码为 HttpRequest、HttpContent 和 LastHttpContent 消息
  • HttpResponseDecoder 将字节解码为 HttpResponse、HttpContent 和 LastHttpContent 消息
  • HttpClientCodecHttpServerCodec 则将请求和响应做了一个组合。

聚合 HTTP 消息

由于 HTTP 的请求和响应可能由许多部分组成,因此你需要聚合它们以形成完整的消息。为了消除这项繁琐的任务,Netty 提供了一个聚合器 HttpObjectAggregator,它可以将多个消息部分合并为 FullHttpRequest 或者 FullHttpResponse 消息。通过这样的方式,你将总是看到完整的消息内容。
image.png

HTTP 压缩

当使用 HTTP 时,建议开启压缩功能以尽可能多地减小传输数据的大小。虽然压缩会带来一些 CPU 时钟周期上的开销,但是通常来说它都是一个好主意,特别是对于文本数据来说。Netty 为压缩和解压缩提供了 ChannelHandler 实现,它们同时支持 gzip 和 deflate 编码。
image.png

使用 HTTPS

启用 HTTPS 只需要将 SslHandler 添加到 ChannelPipeline 的 ChannelHandler 组合中。
1、首先实现 Http 服务器并浏览器访问;
2、增加 SSL 控制;
3、实现客户端并访问。