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

网络编程-网络原理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五层协议栈 具体的内容, 我们之前的网络初始里面有, 其实就是先前的计算机的发明者把…...

基于若依框架的动态分页逻辑的实现分析

如果让我们自己写分页查询的逻辑&#xff0c;应该怎么写呢&#xff1f; 在前端要完成分页的逻辑实际要做的工作还是挺多的。 分页查询应该支持查询参数的输入&#xff0c;对于一个有众多属性的列表&#xff0c;可能有很多查询参数&#xff0c;对于不同的参数类型&#xff0c;…...

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务&#xff0c;涉及训练模型将图像分类为预定义类别。本文中&#xff0c;我们将探讨如何使用 PyTorch 构建一个简单的自定…...

【数据结构篇】顺序表 超详细

目录 一.顺序表的定义 1.顺序表的概念及结构 1.1线性表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 二.动态顺序表的实现 1.准备工作和注意事项 2.顺序表的基本接口&#xff1a; 2.0 创建一个顺序表 2.1 顺序表的初始化 2.2 顺序表的销毁 2.3 顺序表的打印 3.顺序…...

kubernetes 集群搭建(二进制方式)

Kubernetes 作为当今最流行的容器编排平台&#xff0c;提供了强大的功能来管理和扩展容器化应用。除了使用 kubeadm 等工具简化集群的创建过程外&#xff0c;直接通过二进制文件安装 Kubernetes 组件也是一种常见的方法。这种方式给予用户更多的控制权&#xff0c;并且适用于那…...

linux平台RTMP|RTSP播放器如何回调SEI数据?

我们在对接Linux平台RTMP|RTSP播放的时候&#xff0c;有遇到这样的技术需求&#xff0c;合作企业在做无人机视觉分析场景的时候&#xff0c;除了需要低延迟的拿到解码后的RGB|YUV数据&#xff0c;然后投递给他们自己的视觉算法处理模块外&#xff0c;还需要播放器支持SEI的回调…...

Vue uni-app免手动import

unplugin-auto-import 是一个流行的 JavaScript/TypeScript 插件&#xff0c;可以自动导入常用的库、API 或自定义函数&#xff0c;减少手动书写 import 语句的繁琐操作。它常用于 Vue、React 等框架&#xff0c;帮助开发者提高效率和减少样板代码。 核心功能&#xff1a; 自…...

7. 计算机视觉

计算机视觉&#xff08;Computer Vision&#xff0c;简称 CV&#xff09;是人工智能&#xff08;AI&#xff09;领域中的一个重要分支&#xff0c;旨在使计算机能够像人类一样“看”并理解数字图像或视频。它结合了计算机科学、数学、图像处理、模式识别、机器学习等多个学科&a…...

在服务器进行docker部署频繁提示permission denied

当你频繁遇到permission denied&#xff0c;证明当前用户的权限不够 可以参考如下操作&#xff1a; 1.创建用户组docker sudo groupadd docker把当前用户添加到docker用户组中 sudo usermod -aG docker $USER优点&#xff1a; 可以在不使用sudo的情况下运行docker命令...

c/c++ static

定义 修饰普通变量&#xff0c;修改变量的存储区域和生命周期&#xff0c;使变量存储在静态区&#xff0c;在 main 函数运行前就分配了空间&#xff0c;如果有初始值就用初始值初始化它&#xff0c;如果没有初始值系统用默认值初始化它。修饰普通函数&#xff0c;表明函数的作…...

C#中System.Text.Json:从入门到精通的实用指南

一、引言 在当今数字化时代&#xff0c;数据的高效交换与处理成为软件开发的核心环节。JSON&#xff08;JavaScript Object Notation&#xff09;凭借其简洁、轻量且易于读写的特性&#xff0c;已然成为数据交换领域的中流砥柱。无论是前后端数据交互&#xff0c;还是配置文件…...

内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)

内存故障原因与诊断 您是否曾遇到过电脑无法启动、黑屏、死机&#xff0c;或者系统卡顿的情况&#xff1f;这些问题看起来很复杂&#xff0c;实际上大多数都是内存故障引起的。内存是电脑的核心组成部分之一&#xff0c;任何小东西问题都可能导致系统死机&#xff0c;严重时甚…...

[操作系统] 进程状态详解

在操作系统中&#xff0c;进程是程序执行的基本单位&#xff0c;操作系统负责管理进程的生命周期。为了高效地管理进程&#xff0c;操作系统通过定义不同的进程状态来表示进程在不同时间点的行为。本文将详细介绍常见的进程状态及其相互之间的转换过程。 进程状态概述 在kerne…...

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…...

【Maui】下拉框的实现,绑定键值对

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/05795ee1c24c49129b822b530ef58302.png) 前言 .NET 多平台应用 UI (.NET MA…...

Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)

Profiles Profile 是一个以名称标识的集合&#xff0c;用于管理 密码 和 资源限制。 每个用户都对应一个profiles&#xff0c;可以通过 CREATE USER 或 ALTER USER 命令分配给用户。 Profiles 可以启用或禁用。 Profiles 可以关联到默认的 DEFAULT Profile。 密码管理&…...

C语言:位段

位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char &#xff08;属于整形家族&#xff09;类型 2. 位段的空间上是按照需要以4个字节&#xff08; 类型 int &#xff09;或者1个字节&#xff08; char &#xff09;的方式来开辟的。 3. 位段涉及…...

MPLS VPN 原理与配置

一.简介 MPLS&#xff0c;称之为多协议标签交换&#xff0c;在九十年代中期被提出来&#xff0c;用于解决传统IP报文依赖查表转发而产生的瓶颈&#xff0c;现多用于VPN技术&#xff0c;MPLS报头封装在数据链路层之上&#xff0c;网络层之下。本文为结合了华为技术和新华三技术…...

稳定的通信桥梁,CCLINKIE转ModbusTCP网关实现AGV运输的光速效应

三菱PLC与AGV机器人搬运车通过稳联技术协议转换网关建立通信 一、现场情况概述 - 三菱PLC&#xff1a;使用CC-Link IE协议进行通信。 - AGV机器人搬运车&#xff1a;使用Modbus TCP协议进行通信。 - 协议转换网关&#xff1a;使用稳联技术的协议转换网关将PLC和AGV连接&#xf…...

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. 代码实现 题目链接&#xff1a;3428. Maximum and Minimum Sums of at Most Size K Subsequences 1. 解题思路 这一题不需要连续性&#xff0c;因此我们就是考虑取得子串长度为别为1…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...