几十行代码基于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和HttpContentHttpResponsetEncoder(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+云原生技术,「速优云」布局智慧教培和智慧社区
- 终于可以自定义喇叭声:你的特斯拉可以“放屁”吓唬人了
