Tomcat源码分析之手撕Java Web服务器需要准备哪些工作
作为后端开发人员,源码在实际工作中 ,分析服务Web 服务器的手准备使用频率极高 ,而在众多 Web 服务器中 ,器需Tomcat 作为不可或缺的工作重要框架 ,理应成为我们必须学习和掌握的源码重点。
Tomcat 本质上是分析服务一个 Web 框架,那么它的手准备内部机制究竟是如何运作的呢?若不依赖 Tomcat ,我们是器需否有能力自行构建一个 Web 服务器呢?
首先 ,建站模板Tomcat 的工作内部实现极为复杂,涵盖众多组件 。源码我们将在后续章节中对这些细节展开深入探讨 。分析服务 其次,手准备本章将带领大家亲手构建一个 Web 服务器 。器需
接下来,工作让我们一起动手 ,实现一个简易的 Web 服务器吧。
(【注】:参考自《How Tomcat Works》一书)
什么是 Http
HTTP 是一种协议,全称为超文本传输协议 ,它使得 Web 服务器与浏览器能够通过互联网传输与接收数据,属于一种请求/响应的源码下载通信机制 。HTTP 协议的底层依赖于 TCP 协议进行数据传输。目前,HTTP 已经演进至 2.x 版本,历经从 0.9 、1.0、1.1 到如今的 2.x,每次迭代都为协议增加了许多新功能 。
在 HTTP 的通信模式中,始终由客户端发起请求 ,服务器接收到请求后处理相应的逻辑,并在处理完成后返回响应数据 。免费模板客户端接收完数据后 ,请求流程结束 。在此过程中,客户端和服务器均可以对已建立的连接进行中断操作 ,譬如通过浏览器的停止按钮来终止连接。
具体 Http 可参考:
对线面试官 - Http 经典面试题
Http 请求一个 HTTP 协议的请求由三部分组成:
请求行:包括请求方法、URI 和协议/版本,如GET /index.html HTTP/1.1。请求头部 :包含各种元数据信息,如主机地址 、用户代理 、内容类型等,用于描述客户端和请求的香港云服务器相关信息。请求主体:用于传输实际数据 ,通常在 POST 或 PUT 请求中包含,如表单数据或文件内容 。例如:
复制POST /api/gateway/test HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate, br, zstd Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Authorization: Bearer eyJhbGiOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMywidXNlcl9uYW1lIjoicWluZ3l1Iiwic2NvcGUiOlsiYWxsIl0sImV4cCI6MTcyMzkyMzgyMywiYXV0aG9yaXRpZXMiOlsiNDQiLCIzOCJdLCJqdGkiOiIwMzBlMjJlOC0xYTk2LTRkOWQtOTY5ZC0zYzA4ZGNjOTVkNTQiLCJjbGllbnRfaWQiOiJxbXMtYWRtaW4iLCJ1c2VybmFtZSI6InFpbmd5dSJ9.EAlw27ZlHSULReScmD3Au740bNDc0zP8r4FfrDswUMLBheEzfEDp68skbhdqn3LWm3o6wpAcYq6lIOsZn2n6SLyPTh2MrhyiU4v6og6UasJ-DnajPyQ8f1RvM-YjLIlXira3KxSFR0QITsc7IH_XQJKJOI5ipYt3hwb44FITRqyAZk7usnTmWaTvuzTGKCkhO05Yi1b-U8N-6y22Gn6AkGBgABkiXceiq6Uv9ZXj7E2dPGBEpyASrr-Zop2wPCgpl8BxHp0adoBcEophMakEj7btRhXh7f4vXMxdnO6MqT3gZI94y8c-Hp44hZlhnkzs7EA2JyG8vf22TDDLiLTCxg Connection: keep-alive Content-Length: 64 Content-Type: application/json; charset=UTF-8 Cookie: JSESSIONID=8757AA1D1D00449F8B37FFFE3C50F00A Host: note.clubsea.cn Origin: https://note.clubsea.cn Referer: https://note.clubsea.cn/ Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0 access-control-allow-credentials: true lang: zh-cn sec-ch-ua: "Not)A;Brand";v="99", "Microsoft Edge";v="127", "Chromium";v="127" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "macOS"1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.数据的第一行包含请求方法、URI 、协议和版本 。在此例中 ,方法为 POST ,URI 为/api/gateway/test,协议为HTTP/1.1,协议版本为 1.1。各部分通过空格进行分隔。
请求头部从第二行开始,采用英文冒号(:)分隔键和值。高防服务器请求头部与主体内容之间通过一个空行隔开。在此例中,请求主体为表单数据 。
http 协议-响应类似于 HTTP 协议的请求,响应也由三部分构成 :
响应行:包括协议、状态码和状态描述 ,如HTTP/1.1 200 OK。响应头部