当前位置: 首页 > news >正文

网络:手写HTTP

目录

一、HTTP是应用层协议

二、HTTP服务器

三、HTTP服务

认识请求中的uri

HTTP支持默认首页

响应 

功能完善

套接字复用


一、HTTP是应用层协议

HTTP下层是TCP协议,站在TCP的角度看,要提供的服务是HTTP服务。

这是在原来实现网络版计算器时,实现的TCPServer.hpp。

在TCP上层是HttpServer时,为了方便代码阅读,修改上层服务名为http_server。

对于HTTP服务,接收一次请求字符串,做出一次响应。 

在TCP处理服务时,每个线程要做的内容。

 

 

为什么要这样处理,不同于网络版计算器。

1.由于TCP面向字节流,不管上层是什么服务(协议),都可能会出现读取到一个不完整请求的情况(黏包问题),所以,在网络版计算器实现时,添加了对协议的解析过程,比如内容长度、\r\n的分割等内容,标识可以有效的帮助我们对收到的请求做处理,确保至少有一个完整的请求。

2.对于HTTP,其实有较大的概率,能得到一个完整的请求,因此,不再添加对HTTP的黏包处理过程。

二、HTTP服务器

简单的搭建一个HTTP服务器,用Windows浏览器访问,查看HTTP请求格式。

我们可以简单的把HTTP的请求在服务器端直接打印出来。

 

接下来开始正式完成Http主体内容。

我们手写的HTTP服务的主要任务是序列化和反序列化这个过程。因此,如何保证HTTP要服务的字符串是一个完整的请求,并不详细的再去用代码实现。

三、HTTP服务

  • 一个HTTP服务中,有HTTP请求和HTTP响应。

  • 由一个完整的string转化为类成员变量,即结构化数据,这个过程就是反序列化。

 

  • 智能指针管理资源——RAII

  •  可以轻松的得到请求行。

  • 对应请求头和请求内容,相对复杂。 

  • 进一步反序列化,获取更加详细的信息 

  • 解析请求行 

  • 解析请求头

在Print函数中添加解析后打印的代码

 

认识请求中的uri

请求中没有指明某一个服务器资源时,请求的默认就是 /

HTTP支持默认首页

请求/ 并不表示请求服务器的根目录,这个根目录表示的是Web根目录。

  • 一般在实现服务器的同路径下,有一个保存客户端请求资源的目录,叫做wwwroot,即Web根目录,请求/,即表示请求wwwroot。
  • HTTP支持默认首页,所以每一个资源目录下都有index.html。

基于以上两点,请求/本质是请求HTTP服务下的 ./wwwroot/index.html。

  • 修改代码

 

  • 拼接首页 

 

  • 实际资源与url解耦合,我们可以自己定义path 

 

响应 

  • Linux支持telnet,可以自己构建完整请求。 

  • 服务器的工作是收到序列化的请求,把他反序列化后解析,按照请求构造一个序列化的响应 

因此,我们所写HTTP服务器对于响应只有序列化的功能。

  •  详细字段

  •   序列化函数

 

  •  整理一个资源

./wwwroot

认识请求头

  • Content-Type映射表

功能完善

  • 套接字复用


http://www.mrgr.cn/news/100503.html

相关文章:

  • cocos creator使用jenkins打包流程,打包webmobile
  • Python3:Jupyter Notebook 安装和配置
  • Crawl4AI 部署安装及 n8n 调用,实现自动化工作流(保证好使)
  • 【视频生成模型】通义万相Wan2.1模型本地部署和LoRA微调
  • 在 Cursor 中 配置 GitHub MCP Server
  • 【3DMax脚本MaxScript开发:创建高效模型虚拟体绑定和材质管理系统,从3DMax到Unreal和Unity引擎_系列第一篇】
  • 【RabbitMQ消息队列】详解(一)
  • 从视频中学习:从Humanoid-X、UH-1的自动打字幕,到首个人形VLA Humanoid-VLA(自监督数据增强且整合第一人称视角)
  • WPF常用技巧汇总 - Part 2
  • DeepSeek 多头潜在注意力(Multi-Head Latent Attention, MLA)技术
  • STM32F103_HAL库+寄存器学习笔记21 - CAN接收过滤器:CPU减负神器,提升系统效率的第一道防线
  • Drivestduio 代码笔记与理解
  • 论文检索相关网站
  • 大模型API密钥的环境变量配置(大模型API KEY管理)(将密钥存储在环境变量)(python-dotenv)(密钥管理)环境变量设置环境变量
  • 新能源汽车运动控制器核心芯片选型与优化:MCU、DCDC与CANFD协同设计
  • T检验、F检验及样本容量计算学习总结
  • Simulink与C的联合仿真调试
  • Servlet (简单的servlet的hello world程序)
  • 小白自学python第一天
  • 鸿蒙NEXT开发正则工具类RegexUtil(ArkTs)