几十行代码基于Netty搭建一个 HTTP Server( 二 )
了解了 HTTP 协议之后 , 我们再来看一下 HTTP 报文的内容 , 这部分内容很重要!(参考图片来自:)
HTTP 请求报文:
文章插图
HTTP 响应报文:
文章插图
我们的 HTTP 服务器会在后台解析 HTTP 请求报文内容 , 然后根据报文内容进行处理之后返回 HTTP 响应报文给客户端 。
Netty 编解码器如果我们要通过 Netty 处理 HTTP 请求 , 需要先进行编解码 。 所谓编解码说白了就是在 Netty 传输数据所用的 ByteBuf
和 Netty 中针对 HTTP 请求和响应所提供的对象比如 HttpRequest
和 HttpContent
之间互相转换 。
Netty 自带了 4 个常用的编解码器:
HttpRequestEncoder
(HTTP 请求编码器):将HttpRequest
和HttpContent
编码为ByteBuf
。HttpRequestDecoder
(HTTP 请求解码器):将ByteBuf
解码为HttpRequest
和HttpContent
HttpResponsetEncoder
(HTTP 响应编码器):将HttpResponse
和HttpContent
编码为ByteBuf
。HttpResponseDecoder
(HTTP 响应解码器):将ByteBuf
解码为HttpResponst
和HttpContent
ByteBuf
是 Netty 提供的一个字节容器 , 其内部是一个字节数组 。当我们通过 Netty 传输数据的时候 , 就是通过 ByteBuf
进行的 。HTTP Server 端用于接收 HTTP Request , 然后发送 HTTP Response 。 因此我们只需要
HttpRequestDecoder
和 HttpResponseEncoder
即可 。我手绘了一张图 , 这样看着应该更容易理解了 。
文章插图
Netty 对 HTTP 消息的抽象为了能够表示 HTTP 中的各种消息 , Netty 设计了抽象了一套完整的 HTTP 消息结构图 , 核心继承关系如下图所示 。
文章插图
HttpObject
: 整个 HTTP 消息体系结构的最上层接口 。HttpObject
接口下又有HttpMessage
和HttpContent
两大核心接口 。HttpMessage
: 定义 HTTP 消息 , 为HttpRequest
和HttpResponse
提供通用属性HttpRequest
:HttpRequest
对应 HTTP request 。 通过HttpRequest
我们可以访问查询参数(Query Parameters)和 Cookie 。 和 Servlet API 不同的是 , 查询参数是通过QueryStringEncoder
和QueryStringDecoder
来构造和解析查询查询参数 。HttpResponse
:HttpResponse
对应 HTTP response 。 和HttpMessage
相比 ,HttpResponse
增加了 status(相应状态码) 属性及其对应的方法 。HttpContent
: 分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制(HTTP/1.1 才有) , 允许 HTTP 由应用服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多“块”(数据量比较大的情况) 。 我们可以把
推荐阅读
- 华硕基于WRX80的主板现身 为AMD Ryzen Threadripper Pro打造
- 锐龙5000微代码更新:超频更稳、X570无需风扇
- 微软新版电子邮件客户端截图曝光:基于网页端Outlook
- 小米MIUI代码泄露新机:或edmi K40
- 曝光 | 小鹏或春节前推送NGP更新,基于高精地图可自动变道
- 用Python制作图片验证码,这三行代码完事儿
- 基于Spring+Angular9+MySQL开发平台
- 微软称SolarWinds黑客攻击波及公司内部的源代码存储库
- 整合零代码+AI+云原生技术,「速优云」布局智慧教培和智慧社区
- 终于可以自定义喇叭声:你的特斯拉可以“放屁”吓唬人了