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

【网络协议】Http-上

Http请求结构:

结构图1:

 实验解析请求报文:

1.在Edge浏览器上输入ip地址+端口号+文件资源,也就是下图中的120.XX.139.29:8888/A/B/c.html

2.我的程序接收到了一个没有有效载荷的http请求(呼应上面的结构图1),如下

GET /1/2/3.html HTTP/1.1      //请求行(请求方法+请求资源+协议版本)


Host: 120.46.139.29:8888     //请求的目的主机+端口号


Connection: keep-alive         //链接模式


Upgrade-Insecure-Requests: 1  


User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.0.0   //操作系统信息+浏览器信息,这也就是当你用浏览器下载app的时候他自动能识别你需要ios还是安卓。


Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7


Accept-Encoding: gzip, deflate    //客户端可以接收的编码类型


Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6   //编码符号

3.关闭我的HttpServer程序

Http响应结构:

结构图2:

代码块1:

const std::string SEP="\r\n";std::string HandlerHttp(const std::string& request)
{//前提:request一定是一个完整的请求报文。//给别人返回的是一个http response;std::cout<<"------------------------------------"<<std::endl;std::cout<<request<<std::endl;std::string response;response+="HTTP/1.1 200 OK"+SEP;//报头response+=SEP;//空行response+="<html><body><h1>This is a test!</h1></body></html>";//正文return response;
}

我自己的服务器在收到http请求时,给客户端返回响应,正文是<html><body><h1>This is a test!</h1></body></html>,被浏览器解释后就会出现下图这样的样子;因为正文部分使用了html,一种描述网页的语言;

深入理解:

空行能让报头和正文被区分,从而识别出收到的请求或相应的正文开头。

但是当多个http请求同时发送给服务器的时候,如果不知道正文有多长就无法有效识别正文,那怎么才能知道正文读没读取完呢?答案是在响应报头中有Content-Length代表Body的长度

这里想一个问题在上面的代码中,我的服务器在给浏览器返回响应时,响应报头中并没有带正文长度,那浏览器是如何准确读取完正文的呢?答案是浏览器很牛逼不用我们操心。不过我们可以在上面代码块1的基础上加上Content-Length,再进行测试。

代码块2:

std::string HandlerHttp(const std::string& request)
{//前提:request一定是一个完整的请求报文。//给别人返回的是一个http response;std::cout<<"------------------------------------"<<std::endl;std::cout<<request<<std::endl;std::string body="<html><body><h1>This is a test!</h1></body></html>";//正文std::string response;response+="HTTP/1.1 200 OK"+SEP;//报头response+="Content-Length: "+std::to_string(body.size())+SEP;//报头-content_length;response+=SEP;//空行response+=body;//正文return response;
}

测试:

1.发送http请求

2.查看响应

XML格式:

网页预览版:

 可以看到报头中有了Content-Length;

 

在服务器里面的所有资源都以文件的形式存在,当服务器找到了用户所申请的资源就会返回响应。响应报头中还会携带Content-Type以表示文件是什么类型的,好让用户的浏览器接收到响应后正确解析资源。

代码块3:

在代码块2的基础上再加上Content-Type。

std::string HandlerHttp(const std::string& request)
{//前提:request一定是一个完整的请求报文。//给别人返回的是一个http response;std::cout<<"------------------------------------"<<std::endl;std::cout<<request<<std::endl;std::string body="<html><body><h1>This is a test!</h1></body></html>";//资源,网页,视频,音频->本质上都是文件,都要有自己的后缀。std::string response;response+="HTTP/1.1 200 OK"+SEP;//状态行response+="Content-Length: "+std::to_string(body.size())+SEP;//报头-content_length;response+="Content-Type: text/html"+SEP;response+=SEP;//空行response+=body;//正文return response;
}

可以看到响应body自动被识别成html了。

报头属性数量也变成两个了。 

 

 但是像上面代码那样,把资源写在程序里面显然是不现实的,难不成每次更新资源都需要重新编译程序,然后重新启动服务器?所以服务器Http服务器必须从文件里面读取资源

为了避免文章太长影响观感,所以分多部分叙述,请看下文。

HTTP-中

参考:

1.URL:统一资源定位符(Uniform Resource Locator)统一资源定位系统是专为标识Internet网上资源位置而设置的一种编址方式,平时所说的网页地址指的即是URL。 统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

2.所有字符都需要编码,利用二进制代表字符。例如ASCLL码或者UTF8,因为计算机只认识二进制。

3.URL编码Encode,解码Decode。


 

相关文章:

【网络协议】Http-上

Http请求结构&#xff1a; 结构图1&#xff1a; 实验解析请求报文&#xff1a; 1.在Edge浏览器上输入ip地址端口号文件资源&#xff0c;也就是下图中的120.XX.139.29:8888/A/B/c.html 2.我的程序接收到了一个没有有效载荷的http请求(呼应上面的结构图1)&#xff0c;如下 GET …...

Langchain-chatchat本地部署

Langchain-chatchat本地部署 参考官网 环境配置 conda安装 minicoda下载地址 安装时注意勾选上添加环境变量。安装完成之后使用conda --version测试一下版本。 环境创建 先配置一下conda的镜像地址&#xff08;使用阿里的靠谱一些&#xff09;&#xff0c;这里要修改一下…...

SQL故障和排查解决浅析

MySQL长连接 MySQL长连接是指应用程序与MySQL数据库之间的连接在执行完一个操作后不会立即关闭&#xff0c;而是保持活动状态以供后续使用。这种连接模式在某些情况下可以提高性能&#xff0c;但也可能导致一些问题。以下是MySQL长连接的一些现象和排查方法&#xff1a; 现象…...

基础算法--双指针算法

双指针算法 1.基本介绍 严格的来说&#xff0c;双指针只能说是是算法中的一种技巧。 双指针指的是在遍历对象的过程中&#xff0c;不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向&#xff08;快慢指针&#xff09;或者相反方向&#xff08;对撞指针&#…...

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…...

生物的神经系统与机器的人工神经网络

生物的神经系统与机器的人工神经网络 文章目录 前言一、人工神经网络二、生物的神经系统三、关系四、相似与区别4.1. 相似&#xff1a;4.2. 区别: 总结 前言 因为本人是学生物的&#xff0c;并且深度学习的核心——人工神经网络与生物的神经系统息息相关&#xff0c;故想要在本…...

JNI 基础

一、JNI 涉及的名词概念 1.1、 JNI&#xff1a;Java Native Interface 它是Java平台的一个特性(并不是Android系统特有的)。实现Java代码调用C/C的代码&#xff0c;C/C的代码也可以调用Java的代码. 1.2、 二进制库分类 &#xff1a; 静态库&#xff0c;动态库. 静态库 系统…...

用户参数(zabbix-agent)

-s 指向被监控端地址 -p 指向被监控端端口 -k 指向key的名字 监控内存使用率 agent vi a.conf server web界面 对数据库的avg进行监控 systemctl 创建监控项 另一台 重启 agent 监控请求数 运行时间 对自定义key的理解 写下想要监控的任何参数命令&#xff0c;利用zabbix…...

期权策略篇: 实现买方狂欢,让卖方稳赚不赔的策略

欢迎来到期权策略篇: 实现买方狂欢&#xff0c;让卖方稳赚不赔的策略&#xff0c;今天给大家带来的期权策略比较简单&#xff0c;是我们比较常见的四种单腿期权策略&#xff0c;这四种策略分别是买入看涨期权、买入看跌期权、卖出看涨期权、卖出看跌期权策略。本文来自&#xf…...

关于包,类名,方法名的命名规范

保持与数据库同名的一个命名规范的规则 方法名采用驼峰命名法&#xff0c;保持与数据库同名的一个命名规范的规则 类名采用首字母大写&#xff0c;驼峰命名法&#xff0c;保持与数据库同名的一个命名规范的规则 包名全部使用小写&#xff0c;保持与数据库同名的一个命名规范的规…...

1.1 安装配置CentOS

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;安装VMWare Workstation1、获取安装程序2、进入安装向导3、按提示完成安装 &#xff08;二&#xff09;虚拟网络编辑器1、启动虚拟网络编辑器2、选择VMnet8虚拟网3、更改网络配置4、查看DHCP设置5、查…...

go初识iris框架(七) - 实战资源导入和项目框架搭建

实战项目框架搭建 如下是项目框架搭建后的说明&#xff1a; config:&#xff1a;项目配置文件及读取配置文件的相关功能controller:控制器目目录,项目各个模块的控制器及业务逻辑处理的所在目录datasource:实现mysql连接和操作、封装操作mysql数据库的目录。model:数据实体目…...

甲胎蛋白AFP抗体——博迈伦

甲胎蛋白&#xff08;Alpha-fetoprotein&#xff0c;AFP&#xff09;是一种由胚胎组织产生的蛋白质&#xff0c;通常以胎儿肝脏和胎盘为主要来源。AFP是一种重要的生物标志物&#xff0c;可用于诊断和预测某些疾病的发展情况。 AFP抗体是指能够与AFP结合的抗体&#xff0c;通常…...

junit.Test误踩坑,识别不到@Test注解,无法运行测试方法

问题的出现源自于下面的一段代码&#xff1a; 在这一段代码中&#xff0c;只看到可以运行的main方法&#xff0c;无法看到test方法可以运行的标志。 只能运行main()方法。 开始排查&#xff0c;对junit包的导入进行检查&#xff0c;发现是没有问题的。 怀疑是否是IntelliJ IDE…...

一加Ace2V/Ace竞速版刷入氧OS13系统-谷歌服务套件-全球语言-国际版体验

截止目前2023年9月5日&#xff0c;一加除了刚上市的Ace2Pro机型未确定国际版以外&#xff0c;其他机型均可以支持氧OS系统刷入。今天我们刷入的就是一加Ace2V和一加Ace竞速版本&#xff0c;两款机型均为MTK天玑处理器&#xff0c;并且系统已经升级了COlorOS13系统&#xff0c;所…...

Java 华为真题-猴子爬山

需求&#xff1a; 一天一只顽猴想去从山脚爬到山顶&#xff0c;途中经过一个有个N个台阶的阶梯&#xff0c;但是这猴子有一个习惯&#xff1a;每一次只能跳1步或跳3步&#xff0c;试问猴子通过这个阶梯有多少种不同的跳跃方式&#xff1f; 输入描述 输入只有一个整数N&#xff…...

Axios笔记

1、Axios介绍 Axios基于promise网络请求库&#xff0c;作用于node.js和浏览器中&#xff08;即同一套代码可以运行在node.js和浏览器中)&#xff0c;在服务器中他使用原生node.js http,在浏览器端则使用XMLHttpRequest。 特性&#xff1a; &#xff08;1&#xff09;、支持 Pro…...

如何使用try-except语句处理Python中的异常

在python爬虫行业里面&#xff0c;异常处理能力已经成为了一项非常重要的技能。随着软件规模的不断扩大和复杂性的增加&#xff0c;异常处理能力已经成为了评判一个示波器水平的重要指标。 &#xff0c;学会使用try-except语句来捕获和处理Python异常&#xff0c;对于我们做爬虫…...

学Python的漫画漫步进阶 -- 第十一步.常用的内置模块

学Python的漫画漫步进阶 -- 第十一步.常用的内置模块 十一、常用的内置模块11.1 数学计算模块——math11.2 日期时间模块——datetime11.2.1 datetime类11.2.2 date类11.2.3 time类11.2.4 计算时间跨度类——timedelta11.2.5 将日期时间与字符串相互转换 11.3 正则表达式模块—…...

发现无尽的创意可能性——Photo Image Editor Pixelstyle for Mac

无论您是一名专业摄影师还是一个爱好者&#xff0c;您都需要一款强大而多功能的图像编辑软件来实现您的创意。Photo Image Editor Pixelstyle for Mac将成为您的创作利器&#xff0c;帮助您探索图像编辑的无限可能性。 Photo Image Editor Pixelstyle for Mac是一款专业级的图…...

如何免费获得Windows风扇智能控制:FanControl终极指南

如何免费获得Windows风扇智能控制&#xff1a;FanControl终极指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...

3分钟掌握微信聊天记录永久保存:从数据备份到智能分析完全攻略

3分钟掌握微信聊天记录永久保存&#xff1a;从数据备份到智能分析完全攻略 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

现代Web应用特性管理:从概念到工程实践

1. 项目概述&#xff1a;一个面向现代Web开发的特性管理工具 如果你和我一样&#xff0c;长期在Web应用开发的一线摸爬滚打&#xff0c;那你一定对“特性开关”这个概念不陌生。简单来说&#xff0c;它就像你家里电灯的总闸&#xff0c;可以随时控制某个功能是“亮”还是“灭”…...

gqty:零配置强类型GraphQL客户端,颠覆传统开发体验

1. 项目概述&#xff1a;一个颠覆性的GraphQL客户端方案如果你在过去几年里深度参与过前端开发&#xff0c;尤其是与GraphQL API打交道&#xff0c;那么你一定体会过那种“甜蜜的负担”。GraphQL带来的数据查询自由度和类型安全让人着迷&#xff0c;但随之而来的客户端状态管理…...

PCL圆柱拟合进阶:从模型参数到完整轴线的精准计算

1. PCL圆柱拟合的核心挑战与工业需求 在工业测量和逆向工程领域&#xff0c;圆柱体是最常见的几何特征之一。想象一下汽车发动机的活塞杆、液压缸的活塞筒&#xff0c;或者机械臂的旋转轴&#xff0c;这些关键部件都需要精确的圆柱几何参数。PCL&#xff08;Point Cloud Librar…...

【SITS 2026 K8s for ML合规框架】:通过CNCF AI WG审核的3层资源隔离模型(含YAML模板+准入控制器配置)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生Kubernetes编排&#xff1a;SITS 2026 K8s for ML工作负载 SITS 2026 引入了专为机器学习工作负载深度优化的 AI-native Kubernetes 编排层&#xff0c;突破传统 K8s 在资源弹性、拓扑感知与训练…...

ElevenLabs商业规模化陷阱(内部白皮书节选):当TTS调用量突破500万/月,这3个架构断层将触发收入增长断崖

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs Growing Business ElevenLabs 已从语音合成初创公司快速演进为全球 AI 语音基础设施的关键提供者&#xff0c;其业务增长体现在 API 调用量年增超 320%、企业客户数突破 12,000 家&#xff…...

BBDown完全指南:5分钟掌握B站视频下载终极方案

BBDown完全指南&#xff1a;5分钟掌握B站视频下载终极方案 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 你是否经常遇到想收藏B站优质视频却找不到合适工具的困扰&#xff1f;当网络…...

Anaconda 安装与配置 的所有核心步骤

下载&#xff1a;去官网或靠谱的镜像源&#xff08;如清华镜像&#xff09;下载 2025.06版 Windows x64 安装包&#xff08;约950MB&#xff09;。安装&#xff1a;运行 .exe 文件。关键选项1&#xff1a;勾选 Add Anaconda to my PATH &#xff08;添加到环境变量&#xff09;…...

品牌AI印相失效90%源于这7个参数误设,可口可乐级商业输出必须校准的4项色彩/构图硬指标

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney Coca Cola印相失效的底层归因诊断 Midjourney v6 及后续版本中&#xff0c;针对品牌标识&#xff08;如 Coca-Cola 经典红白波浪字体与动态弧线&#xff09;的“印相”&#xff08;prompt i…...