作为后端开发人员 ,源码在实际工作中,分析服务Web 服务器的手准备使用频率极高 ,而在众多 Web 服务器中 ,器需Tomcat 作为不可或缺的工作重要框架,理应成为我们必须学习和掌握的源码重点 。
Tomcat 本质上是分析服务一个 Web 框架 ,那么它的手准备内部机制究竟是如何运作的呢 ?若不依赖 Tomcat ,我们是器需否有能力自行构建一个 Web 服务器呢?
首先 ,源码库Tomcat 的工作内部实现极为复杂,涵盖众多组件。源码我们将在后续章节中对这些细节展开深入探讨。分析服务 其次,手准备本章将带领大家亲手构建一个 Web 服务器 。器需
接下来,工作让我们一起动手,实现一个简易的 Web 服务器吧。
(【注】:参考自《How Tomcat Works》一书)
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。响应头部:包含各种元数据信息,如内容类型、服务器信息、日期等,用于描述服务器和响应的相关信息。响应主体