网络:手写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服务响应只有序列化的功能。

  •  详细字段

  •   序列化函数

  •  整理一个资源
  • Content-Type映射表

 

 

 

功能完善

  • 套接字复用

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记(七十八)Do generative video models understand physical principles?

Do generative video models understand physical principles? 文章概括Physics-IQ基准数据集评估协议为什么要创建一个真实世界的Physics-IQ数据集模型物理理解的评估指标动作发生在哪里?空间IoU(Spatial IoU)动作在哪里、何时发生&#xf…

AXP2101入门

目录 核心功能与特性封装与配置安全与可靠性 AXP2101 是一款由全志公司开发的单电池 NVDC 电源管理集成电路(PMIC),专为锂离子/锂聚合物单电池应用设计,适用于需要多通道电源输出的设备。 核心功能与特性 1.输入与充电管理 输入…

DAY8:Oracle高可用架构深度解析与Data Guard单节点搭建实战

引言 在数据库领域,高可用性(High Availability)是保障业务连续性的核心要求。Oracle作为企业级数据库的领导者,提供了RAC、Data Guard、GoldenGate三大核心方案。本文将深入剖析这些技术的实现原理,并手把手指导搭建…

游戏引擎学习第243天:异步纹理下载

仓库 https://gitee.com/mrxiao_com/2d_game_6 https://gitee.com/mrxiao_com/2d_game_5 回顾并为今天设定阶段 目前的开发工作主要回到了图形渲染相关的部分。我们之前写了自己的软件渲染器,这个渲染器性能意外地好,甚至可以以相对不错的帧率运行过场…

BBRv2,v3 吞吐为什么不如 BBRv1

为什么 BBRv2/3 测试下来吞吐远不如 2016 年底的 BBRv1,这个事曾经提到过很多次,今天分析一下原理。注意三个事实: BBR 是一种拥塞控制算法;BBR 已经迭代到了 v3 版本;BBRv3 的 “性能” 远不如 BBRv1. 第二点有点不…

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程 前言:一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…

蓝桥杯 15.小数第n位

小数第n位 原题目链接 题目描述 我们知道,整数做除法时,有时会得到有限小数,有时会得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0,它们就具有了统一的形式。 本题的任务是:在上述约定下&#xff0c…

【Docker】在Ubuntu平台上的安装部署

写在前面 docker作为一种部署项目的辅助工具,真是太好用了需要魔法,不然无法正常运行笔者环境:ubuntu22.04 具体步骤 更新系统包索引 sudo apt update安装必要依赖包 sudo apt install -y apt-transport-https ca-certificates curl softwa…

Spring Boot默认缓存管理

Spring框架支持透明地向应用程序添加缓存,以及对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法,从而减少操作数据的执行次数,同时不会对程序本身造成任何干扰。Spring Boot继承了Spring框架的缓存管理功能&#xff…

数模学习:一,层次分析法

基本定位: 适用于解决评价,选择类问题(数值不确定,需要自己结合资料数据等自己填写)。 引入: 若要解决选择类的问题,打分的方式最为常用——即采用权重表: 指标权重选择1选择2..…

模板偏特化 (Partial Specialization)

C 模板偏特化 (Partial Specialization) 模板偏特化允许为模板的部分参数或特定类型模式提供定制实现,是 静态多态(Static Polymorphism) 的核心机制之一。以下通过代码示例和底层原理,全面解析模板偏特化的实现规则、匹配优先级…

sql 根据时间范围获取每日,每月,年月的模版数据

1:获取每日模版数据(参数也支持跨年) SELECT a.selected_date cdate FROM(SELECT adddate(1970-01-01,t4.i * 10000 t3.i * 1000 t2.i * 100 t1.i * 10 t0.i) selected_dateFROM( SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELEC…

windows上的RagFlow+ollama知识库本地部署

一、 docker的安装与部署 1. 下载Docker Desktop 访问Docker官网并下载适用于Windows的Docker Desktop安装程序。 RagFlow对docker的要求: Docker ≥ 24.0.0 & Docker Compose ≥ v2.26. docker 下载地址: https://www.docker.com/ Get Docker | Docker Docs 如下图所…

多模态大语言模型arxiv论文略读(三十四)

SHIELD : An Evaluation Benchmark for Face Spoofing and Forgery Detection with Multimodal Large Language Models ➡️ 论文标题:SHIELD : An Evaluation Benchmark for Face Spoofing and Forgery Detection with Multimodal Large Language Models ➡️ 论文…

Unity InputSystem触摸屏问题

最近把Unity打包后的windows软件放到windows触摸屏一体机上测试,发现部分屏幕触摸点击不了按钮,测试了其他应用程序都正常。 这个一体机是这样的,一个电脑机箱,外接一个可以触摸的显示屏,然后UGUI的按钮就间歇性点不了…

AI打开潘多拉魔盒?当深度伪造成为虚假信息的核动力引擎

引言:虚假信息——数字时代的“隐形武器” 在人工智能(AI)与社交媒体深度融合的今天,虚假信息(Disinformation)已成为全球社会面临的最严峻挑战之一。 source: Gartner.(2024). 2025 Top Strategic Techno…

MySQL的图形管理工具-MySQL Workbench的下载安装及使用【保姆级】

MySQL的图形管理工具-MySQL Workbench的下载安装及使用 下载安装使用Workbench 创建数据库Workbench 创建数据表数据表中的增删改增加数据 删除数据修改数据 下载 MySQL的图形管理工具有很多,常用的有MySQL Workbench、phpMyAdmin和Navicat等软件。我选择了MySQL W…

Spring Security认证流程

认证是Spring Security的核心功能之一,Spring Security所提供的认证可以更好地保护系统的隐私数据与资源,只有当用户的身份合法后方可访问该系统的资源。Spring Security提供了默认的认证相关配置,开发者也可以根据自己实际的环境进行自定义身…

程序员鱼皮最新项目-----AI超级智能体教程(一)

文章目录 1.前言1.什么是AI大模型2.什么是多模态3.阿里云百炼平台介绍3.1文本调试展示3.2阿里云和dashscope的关系3.3平台智能体应用3.4工作流的创建3.5智能体编排应用 1.前言 最近鱼皮大佬出了一套关于这个AI 的教程,关注鱼皮大佬很久了,鱼皮大佬确实在…

《Pinia 从入门到精通》Vue 3 官方状态管理 -- 进阶使用篇

《Pinia 从入门到精通》Vue 3 官方状态管理 – 基础入门篇 《Pinia 从入门到精通》Vue 3 官方状态管理 – 进阶使用篇 《Pinia 从入门到精通》Vue 3 官方状态管理 – 插件扩展篇 目录 Store 的模块化设计4.1 多模块结构设计✅ 推荐目录结构(中大型项目) …