02|初出茅庐:构造一个极简的HttpServer
郭屹
你好,我是郭屹,今天我们继续学习手写 MiniTomcat,从这里开始要同步写代码了。
与 MiniSpring 相同,我们也会从一个最简单的程序开始,一步步地演化迭代,最终实现 Tomcat 的核心功能。这节课,我们就来构造第一个简单的 Web 服务器应用程序。结构如图所示:
可以看出,当用户从浏览器这端发起一个静态的请求时,这个极简 HTTP Server 仅仅是简单地将本地的静态文件返回给客户端。这也正是我们手写 MiniTomcat 的第一步。
Web 请求流程
一个 Web 服务器,简单来讲,就是要按照 HTTP 协议的规范处理前端发过来的 Request 并返回 Response。在这节课中,我们计划请求 http://localhost:8080/test.txt 这个地址,实现一个最简单的 Web 应用服务器。
我们简单回顾一下,在浏览器中输入一个网页地址,键入回车的那一刻,从请求开始到请求结束这个过程会经历几步。
DNS 解析,将域名解析为 IP 地址。
与目标端建立 TCP 连接。
发送 HTTP 请求。
服务器解析 HTTP 请求并返回处理后的报文。
浏览器解析返回的报文并渲染页面。
TCP 连接断开。
在这个过程中,还有很多诸如三次握手,DNS 解析顺序等具体技术细节,因为不是这节课的主要论题,所以这里不再详细说明。在上述 Web 请求流程中,我们重点关注“发送 HTTP 请求”“服务器解析 HTTP 请求并返回处理后的报文”以及“浏览器解析返回的报文并渲染页面”这三步。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何通过手写代码构建一个极简的HTTP服务器,涉及了Web请求的流程、项目结构和Request请求类的构建过程,以及如何构造服务器来接收客户端的请求并返回处理后的报文。文章展示了如何构建Response返回对象,以及如何将HTTP服务器变成一个应用服务器。通过学习本文,读者可以了解到构建一个极简的HTTP服务器的基本流程和关键技术点,为进一步深入学习和实践打下基础。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 MiniTomcat》,新⼈⾸单¥59
《手把手带你写一个 MiniTomcat》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- 猛禽不是鸟在应用服务器中维护一个请求地址和对应处理类【方法】的映射关系,然后在parse解析出来uri之后,通过映射关系找到对应的处理方法。
作者回复: 赞👍🏻
2024-02-19归属地:广东1 - 听风有信应用服务器的话,要根据客户端的请求,然后执行相应的业务处理程序,最后将业务程序的输出返回给客户端,这种输出的内容是动态生成的。
作者回复: 过程是这样。这些问题是思考题,没有标准答案,只是启发式的。从静态文本到程序动态生成,最简单的就是提供一个接口,服务器加载实现类,调用固定的方法,返回字符串。
2023-12-18归属地:广东1 - Xiaosong好奇为什么parseUri要写的这么麻烦,直接requestString.split(' '),检查一下length,然后 取第二个不就行了吗
作者回复: 这是出于性能的考虑,网络程序,直接从流上拿字节。
2024-01-25归属地:美国 - 健康的小牛犊Spring和tomcat是如何结合在一起的呢,按理说tomcat本身就可以作为一个web服务器了,那spring的作用是啥呢
作者回复: Spring是一个应用程序框架,不是服务器。
2024-01-02归属地:江苏3 - Geek_50a5cc如果将读取的文件内容,放在message里面返回过去; String Message = "HTTP/1.1 404 FIle Not Found\r\n" + "Content-Type: text/html\r\n" + "Content-Length: 23\r\n" + "\r\n" + "<h1>"+ result.toString() + "</h1>"; output.write(Message.getBytes()); 如果文件里 字符 很多的时候,这个是否都会完全输出显示出来呢; (result就是文件字节流转换的字符串)
作者回复: http协议没有限制响应数据的大小,理论上没有规定。不过实际服务器和应用场景,可以自行规定大小限制。
2023-12-15归属地:北京 - KoyiRequest类 第13行 读取数据时,使用一个while循环判断返回值是否大于0以保证成功读取完数据是不是好些
作者回复: 往后看,现在是起步的粗糙版本。
2023-12-13归属地:上海 - 阿加西参考了《How Tomcat Works》
作者回复: 经典必须的。一步步自己写下来。
2023-12-12归属地:中国香港 - 旷野之希我遇到一个问题,当时随便使用了一个端口号7000,会报403 forbidden的异常,但是换一个端口,比如8888就可以正常访问hello.txt了,这可能是什么原因呢?2024-03-07归属地:加拿大
收起评论