Products
GG网络技术分享 2025-11-23 14:43 5
作为一个程序猿,对造轮子这事情Ke以说是情有独钟,几乎天天dou想自己动手Zuo个啥。我们dou知道http是基于tcp之上的, 那我们现在就自己基于tcp来实现一个Zui小的http服务,功Neng非常简单:,深得我心。
完整的例子Ke以kanGitHub上代码,欢迎star,别纠结...。

下面是返回值的代码:
差不多得了... 那http2.0后还Neng不Nenggeng快了呢?于是就有了QUIC协议,这个协议肯定是为了解决http2.0的某些问题的。
我给跪了。 接着我们在自己写的过程中发现了http1.1的种种问题, 针对这些问题有了http2.,继而又有了QUIC。
具体Ke以kan两张图:
重传有个测不准问题, 左边是1.,我们发现重发100编号的时候,Ru果后续收到应答101,我们不知道这个是针对第一次100的应答还是第二次重传100的应答, 看好你哦! http2.0则定义了每次发送数据,编号dou需要增加,然后通过offset来标明数据的前后续关系。
上面我们将收到的数据稍微整理下。
正文分割线
那我们现在目标就是去Zuo这个战斗机。而这个方法, 就是自己去造轮子,造的目的不是为了在项目中使用自己造的轮子, 我裂开了。 而是为了去了解轮子的构造,然后自己动手去体会造轮子的过程。
实锤。 https://github.com/zhuanxuhit/go-in-practice/tree/master/wheel/http/v1
本文名称:带你手撸一个http服务器 人间清醒。 网站路径:https:///news/.html
上面每一条dou涉及好多轮子, 每一个dou是精通,Ru果真NengZuo到。那这个人Ke以说是码农中的战斗机,总体来看...。
HTTP 其实是将三个请求变成三个流, 将数据分成帧,乱序发送到一个tcp连接中
本文主要讲http协议。
然后我们再解析首部
此处请求行是格式是固定的,
通过stream对不同请求进行区分,然后在将一个消息拆分为多个帧进行发送。
那上面这两点dou是要解决的问题, 在http2.0中dou有相应的方案,研究研究。
Ps:上面这个代码有个小问题,主要原因是tcp连接是字节流的,我们通过readAll方法从连接中读取数据的是只要浏览器上不主动断开,会一直阻塞在readaALL上。。。
先写代码来kankan的:
先说说本文这个通信协议和我们之前轮子系列文章rpcdou是消息协议,只是对消息体的编码格式不同而Yi,公正地讲...。
换位思考... 解析完后 我们在写返回值,返回报文的格式放下:
Ke以kan到我们读取的到数据是如上,我们Ke以kan到格式上是符合的。
下面我们开始来写解析代码, 先是解析文件头
先来kan请求格式:
我们有了第一版http轮子后我们Neng和前面介绍的轮子系列:rpc联系起来在rpc系列中,我们讲了设计通信协议来传递消息,此处http是通过头部的url+method的方法来表示我要调用服务端哪个方法,然后分割符是使用,连续两个 表示后续是消息体,为了高速我们消息体的大小和格式,在header中必须指明content-type和content-length,这些dou是在我们在实现http协议的时候遵循的,太治愈了。。
在实现过程中,我们发现Ru果用http1.1作为通信协议,有什么问题呢,冲鸭!?
记住... 成dou网站建设公司_创新互联, 为您提供企业建站、移动网站建设、App开发、网站收录、搜索引擎优化、品牌网站制作
请大家务必... 那怎么NengZuo到一个连接一边发起多个请求呢?通信双方就必须对每个请求进行编码,这样不同的响应就Neng和请求对应上了。
上面首部中Content-length: 0Ke以说是非常关键,他告诉了我们应该要在两个 后继续读取多少字节。
那现在写完一开始版代码, 我们回过头下我们之前Zuo的rpc轮子,数据编码采用了protobuf,然后基于tcp自己定义了一套消息协议,其实Zuo的事情跟http/.1是一样的,我们完全Ke以在http通信的时候,将content-type设置为protobuf,然后通信双方双方Neng够编解码即可,好家伙...。
http的报文大概分为3部分:
1. 请求行:包括请求方法、 请求URI和HTTP版本
太魔幻了。 2. 请求头部:包含各种键值对,如Host、User-Agent等
3. 请求体:通常是POST请求中的数据
通过学习手撸HTTP服务器,我们Ke以深入了解HTTP协议的原理和实现过程,提升自己的实战技Neng,从而在就业市场上geng具竞争力。
Demand feedback