几十行代码基于Netty搭建一个 HTTP Server( 二 )


了解了 HTTP 协议之后 , 我们再来看一下 HTTP 报文的内容 , 这部分内容很重要!(参考图片来自:)
HTTP 请求报文:
几十行代码基于Netty搭建一个 HTTP Server文章插图
HTTP 响应报文:
几十行代码基于Netty搭建一个 HTTP Server文章插图
我们的 HTTP 服务器会在后台解析 HTTP 请求报文内容 , 然后根据报文内容进行处理之后返回 HTTP 响应报文给客户端 。
Netty 编解码器如果我们要通过 Netty 处理 HTTP 请求 , 需要先进行编解码 。 所谓编解码说白了就是在 Netty 传输数据所用的 ByteBuf 和 Netty 中针对 HTTP 请求和响应所提供的对象比如 HttpRequestHttpContent之间互相转换 。
Netty 自带了 4 个常用的编解码器:

  1. HttpRequestEncoder (HTTP 请求编码器):将 HttpRequestHttpContent 编码为 ByteBuf
  2. HttpRequestDecoder (HTTP 请求解码器):将 ByteBuf 解码为 HttpRequestHttpContent
  3. HttpResponsetEncoder (HTTP 响应编码器):将 HttpResponseHttpContent 编码为 ByteBuf
  4. HttpResponseDecoder(HTTP 响应解码器):将 ByteBuf 解码为 HttpResponstHttpContent
网络通信最终都是通过字节流进行传输的 。ByteBuf 是 Netty 提供的一个字节容器 , 其内部是一个字节数组 。当我们通过 Netty 传输数据的时候 , 就是通过 ByteBuf 进行的 。
HTTP Server 端用于接收 HTTP Request , 然后发送 HTTP Response 。 因此我们只需要 HttpRequestDecoderHttpResponseEncoder 即可 。
我手绘了一张图 , 这样看着应该更容易理解了 。
几十行代码基于Netty搭建一个 HTTP Server文章插图
Netty 对 HTTP 消息的抽象为了能够表示 HTTP 中的各种消息 , Netty 设计了抽象了一套完整的 HTTP 消息结构图 , 核心继承关系如下图所示 。
几十行代码基于Netty搭建一个 HTTP Server文章插图
  1. HttpObject : 整个 HTTP 消息体系结构的最上层接口 。 HttpObject 接口下又有 HttpMessageHttpContent两大核心接口 。
  2. HttpMessage: 定义 HTTP 消息 , 为HttpRequestHttpResponse提供通用属性
  3. HttpRequest : HttpRequest对应 HTTP request 。 通过 HttpRequest 我们可以访问查询参数(Query Parameters)和 Cookie 。 和 Servlet API 不同的是 , 查询参数是通过QueryStringEncoderQueryStringDecoder来构造和解析查询查询参数 。
  4. HttpResponseHttpResponse 对应 HTTP response 。 和HttpMessage相比 , HttpResponse 增加了 status(相应状态码) 属性及其对应的方法 。
  5. HttpContent : 分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制(HTTP/1.1 才有) , 允许 HTTP 由应用服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多“块”(数据量比较大的情况) 。 我们可以把


    推荐阅读