网络编程-网络原理HTTP初识
文章目录
- TCP/IP五层协议栈
- 关于自定义协议
- 常见自定义协议引入
- 行文本格式
- XML格式
- JSON
- protobuf
- HTTP原理
- 非自定义的应用层协议
- HTTP的发展
- HTTP的传输模式
- HTTP协议中的代理模式和抓包工具
TCP/IP五层协议栈
具体的内容, 我们之前的网络初始里面有, 其实就是先前的计算机的发明者把计算机网络通信分为了不同的层次, 教科书上一般是OSI五层网络架构, 我们日常开发常用的是TCP/IP五层协议栈

在先前的套接字里, 我们主要是在传输层进行工作, 但是我们日常开发使用最多的其实还是应用层, 所以应用层常用的一些协议才是我们学习的重点
我们在开发的时候, 可以使用下面两种方法组织发送的信息
- 使用自定义的协议
- 使用官方认定的协议(例如
http)
关于自定义协议
关于自定义协议, 主要分为两个阶段
- 根据需求, 明确需要传输那些消息
- 约定好传输文件的格式
说成大白话就是你自己编一个自己能看懂的协议就行了
常见自定义协议引入
下面我们列举几种常见的自定义协议的方式
我们使用的案例均为: 外卖订餐的场景
我们外卖订餐的时候, 向服务器发送的请求数据一般是如下的内容(简化版本)
请求: 客户ID, 客户地址, 客户联系方式, 商家ID, 商家商品编号…
响应: 是否成功订餐(1/0), 预计多长时间送达, 福利信息(优惠卷)
行文本格式
在发送的时候把这些信息通过一些特定的字符进行分割, 然后拼接为一个字符串, 服务器就可以解析到, 返回的时候依然是这样的格式, 这种方法是最简单的一种自定义协议, 现在基本不用了
我们的样例使用 , 号分割
例:
请求: C1826445, 郑州市中原区郑州大学图书馆, 13645632156, S562347, SP13
响应: 1, 35分钟, 2元代金券
通过简单的行文本, 我们就可以构造自己的一种传输协议
优缺点:
- 优点: 节省网络资源
- 缺点: 可读性差, 仍然存在冗余信息(分隔符)
XML格式
还可以通过XML的格式进行请求和响应, XML是一种和HTML十分相似的格式, 也是通过标签来组织内容, 但是HTML的标签的内容, 都是设计HTML语言的人规定好的(HTML5也允许自定义了), 但是XML的格式是可以程序员定制的
使用XML格式的请求与响应实例如下
请求
<requset><customer_ID>C1826445</customer_ID><customer_addr>郑州市中原区郑州大学图书馆</customer_addr><customer_phoneNum>13645632156</customer_phoneNum><shop_ID>S562347</shop_ID><shop_food_ID>SP13</shop_food_ID>
</requset>
响应
<responce><isOrdered>1</isOrdered><wait_time>35</wait_time><reward>2元代金券</reward>
</responce>
优缺点:
- 优点: 可读性好
- 缺点: 冗余信息过多, 网络传输中过于消耗资源
所以在现在, XML也不作为自定义协议的首选了
JSON
这个是当下主流的自定义协议的方案
和XML类似, 也是使用键值对的方式来传输消息, 但是少了许多冗余信息
请求
{"customer_ID": "C1826445","customer_addr": "郑州市中原区郑州大学图书馆","customer_phoneNum": "13645632156","shop_ID": "shop_ID","shop_food_ID": "SP13"
}
响应
{"isOrdered": 1,"wait_time": 32,"reward": "2元代金券"
}
这种使用JSON作为自定义协议的方式是当下最主流的方式, 要重点记忆
优点: 可读性好, 占用资源少
缺点: 仍存在少量冗余信息
protobuf
这是一种基于二进制格式对数据进行压缩, 不涉及到XML, JSON的冗余信息了, 但是可读性不好, 完全没有冗余信息所以适合高性能的相关场景, 但是大部分场景使用JSON就足够了

使用二进制的方式, 客户端和服务器端规定字节区间对应的数据内容
比如上图的中的蓝色的字节区间就对应了一种数据信息…
优缺点
- 优点: 基于二进制, 冗余最小,节约资源, 适合高性能场景
- 缺点: 可读性极差
HTTP原理
非自定义的应用层协议
关于应用层的协议, 除了自定义的, 还有好多官方的协议

DNS(域名解析相关), URL(唯一地址标识符), HTML(超文本标记语言, 网页前端相关)
SSH(远程操控主机), FTP(文件传输相关), TELNET(网络调试工具), SSL(安全层相关)
HTTP(超文本传输协议, 也是web开发最核心的协议), HTTPS(HTTP+(S(安全)–>SSL))加上安全相关内容的HTTP协议
在这么多协议中, 我们重点学习 HTTP(HTTPS)
HTTP的发展
主要发展流程图如下

HTTP 往往是基于传输层的 TCP 协议实现的.
HTTP1.0, HTTP1.1, HTTP2.0 均为TCP实现的, 但是 HTTP3 基于UDP 实现
⽬前我们主要使⽤的还是 HTTP1.1 和 HTTP2.0, HTTP3.0普及程度不高
HTTP的传输模式
HTTP传输的模式属于典型的一问一答
即客户端发送一个请求, 服务器就返回一个响应
网络中还存在其他的协议模式
- 多问一答: 上传大文件场景
- 一问多答: 下载大文件场景
- 多问多答: 远程控制场景
HTTP协议中的代理模式和抓包工具
我们使用HTTP协议进行通信的时候, 浏览器发送一个请求的申请, 然后交给一个"代理", 通过这个代理进行转发, 服务器接收的时候也是这样, 然后服务器发送响应的时候, 又会经过这个代理…
示意图如下

每一个代理都对请求和响应进行转发, 客户端的代理(抓包工具)成为正向代理, 服务器端的代理称为反向代理
其实仔细想一想, 你电脑上的所有的请求, 都需要经过抓包工具的转发, 那其中涉及的网络安全问题其实是很严重的
抓包工具有
- wireshark: 可以抓很多协议, HTTP, UDP, IP, 以太网数据帧
- fiddler: 专门抓HTTP的, 使用简单
下载之后进行简单的配置就可以进行抓包了, 这里不再细说
简单测试一下抓包
我们尝试简单抓一个leetcode平台的http请求
打开fiddler, 不同颜色的含义如下
- 蓝色的表示获取到了一个网页(HTML)
- 红色的表示得到了一个CSS
- 绿色的表示得到了一个JS
- 灰色的表示这个响应的数据被缓存了
- 红色的表示报错

点进去右侧会显示请求和响应的信息
下面是请求信息, 点击RAW表示的请求的源文件

点击view in Notepad, 使用记事本打开
下面就是HTTP的请求文件的主体(我们之后会细致分析)

请求页面的下面是响应页面(通常需要转码)

点击RAW查看响应的源文件

具体的HTTP相关内容我们之后介绍, 本节只是一个初始, 初步了解一下HTTP是什么, 以及如何进行抓包查看HTTP请求和响应的源文件
相关文章:
网络编程-网络原理HTTP初识
文章目录 TCP/IP五层协议栈关于自定义协议常见自定义协议引入行文本格式XML格式JSONprotobuf HTTP原理非自定义的应用层协议HTTP的发展HTTP的传输模式HTTP协议中的代理模式和抓包工具 TCP/IP五层协议栈 具体的内容, 我们之前的网络初始里面有, 其实就是先前的计算机的发明者把…...
基于若依框架的动态分页逻辑的实现分析
如果让我们自己写分页查询的逻辑,应该怎么写呢? 在前端要完成分页的逻辑实际要做的工作还是挺多的。 分页查询应该支持查询参数的输入,对于一个有众多属性的列表,可能有很多查询参数,对于不同的参数类型,…...
51c~ONNX~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务,涉及训练模型将图像分类为预定义类别。本文中,我们将探讨如何使用 PyTorch 构建一个简单的自定…...
【数据结构篇】顺序表 超详细
目录 一.顺序表的定义 1.顺序表的概念及结构 1.1线性表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 二.动态顺序表的实现 1.准备工作和注意事项 2.顺序表的基本接口: 2.0 创建一个顺序表 2.1 顺序表的初始化 2.2 顺序表的销毁 2.3 顺序表的打印 3.顺序…...
kubernetes 集群搭建(二进制方式)
Kubernetes 作为当今最流行的容器编排平台,提供了强大的功能来管理和扩展容器化应用。除了使用 kubeadm 等工具简化集群的创建过程外,直接通过二进制文件安装 Kubernetes 组件也是一种常见的方法。这种方式给予用户更多的控制权,并且适用于那…...
linux平台RTMP|RTSP播放器如何回调SEI数据?
我们在对接Linux平台RTMP|RTSP播放的时候,有遇到这样的技术需求,合作企业在做无人机视觉分析场景的时候,除了需要低延迟的拿到解码后的RGB|YUV数据,然后投递给他们自己的视觉算法处理模块外,还需要播放器支持SEI的回调…...
Vue uni-app免手动import
unplugin-auto-import 是一个流行的 JavaScript/TypeScript 插件,可以自动导入常用的库、API 或自定义函数,减少手动书写 import 语句的繁琐操作。它常用于 Vue、React 等框架,帮助开发者提高效率和减少样板代码。 核心功能: 自…...
7. 计算机视觉
计算机视觉(Computer Vision,简称 CV)是人工智能(AI)领域中的一个重要分支,旨在使计算机能够像人类一样“看”并理解数字图像或视频。它结合了计算机科学、数学、图像处理、模式识别、机器学习等多个学科&a…...
在服务器进行docker部署频繁提示permission denied
当你频繁遇到permission denied,证明当前用户的权限不够 可以参考如下操作: 1.创建用户组docker sudo groupadd docker把当前用户添加到docker用户组中 sudo usermod -aG docker $USER优点: 可以在不使用sudo的情况下运行docker命令...
c/c++ static
定义 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。修饰普通函数,表明函数的作…...
C#中System.Text.Json:从入门到精通的实用指南
一、引言 在当今数字化时代,数据的高效交换与处理成为软件开发的核心环节。JSON(JavaScript Object Notation)凭借其简洁、轻量且易于读写的特性,已然成为数据交换领域的中流砥柱。无论是前后端数据交互,还是配置文件…...
内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)
内存故障原因与诊断 您是否曾遇到过电脑无法启动、黑屏、死机,或者系统卡顿的情况?这些问题看起来很复杂,实际上大多数都是内存故障引起的。内存是电脑的核心组成部分之一,任何小东西问题都可能导致系统死机,严重时甚…...
[操作系统] 进程状态详解
在操作系统中,进程是程序执行的基本单位,操作系统负责管理进程的生命周期。为了高效地管理进程,操作系统通过定义不同的进程状态来表示进程在不同时间点的行为。本文将详细介绍常见的进程状态及其相互之间的转换过程。 进程状态概述 在kerne…...
[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...
【Maui】下拉框的实现,绑定键值对
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MA…...
Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)
Profiles Profile 是一个以名称标识的集合,用于管理 密码 和 资源限制。 每个用户都对应一个profiles,可以通过 CREATE USER 或 ALTER USER 命令分配给用户。 Profiles 可以启用或禁用。 Profiles 可以关联到默认的 DEFAULT Profile。 密码管理&…...
C语言:位段
位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char (属于整形家族)类型 2. 位段的空间上是按照需要以4个字节( 类型 int )或者1个字节( char )的方式来开辟的。 3. 位段涉及…...
MPLS VPN 原理与配置
一.简介 MPLS,称之为多协议标签交换,在九十年代中期被提出来,用于解决传统IP报文依赖查表转发而产生的瓶颈,现多用于VPN技术,MPLS报头封装在数据链路层之上,网络层之下。本文为结合了华为技术和新华三技术…...
稳定的通信桥梁,CCLINKIE转ModbusTCP网关实现AGV运输的光速效应
三菱PLC与AGV机器人搬运车通过稳联技术协议转换网关建立通信 一、现场情况概述 - 三菱PLC:使用CC-Link IE协议进行通信。 - AGV机器人搬运车:使用Modbus TCP协议进行通信。 - 协议转换网关:使用稳联技术的协议转换网关将PLC和AGV连接…...
Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences
Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences 1. 解题思路2. 代码实现 题目链接:3428. Maximum and Minimum Sums of at Most Size K Subsequences 1. 解题思路 这一题不需要连续性,因此我们就是考虑取得子串长度为别为1…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
