【Linux篇】Http协议(1)(笔记)
目录
一、http基本认识
1. Web客户端和服务器
2. 资源
3. URI
4. URL
5. 事务
6. 方法
7. 状态码
二、HTTP报文
1. 报文的流动
(1)流入源端服务器
(2)向下游流动
2. 报文语法
三、TCP连接
1. TCP传输方式
2. TCP连接状态
3. 套接字
4. TCP连接三次握手
一、http基本认识
1. Web客户端和服务器

Web 内容都是 存储在 Web 服务器 上的。Web 服务器 所使用的是 HTTP 协议,因此 经常会被称为 HTTP 服务器。这些 HTTP 服务器 存储了 因特网中的 数据,如果 HTTP 客户端 发出 请求的话,它们 会提供数据。客户端 向服务器 发送 HTTP 请求,服务器会 在 HTTP 响应 中回送所 请求的数据。
HTTP 客户端 和 HTTP 服务器 共同构成了 万维网的 基本组件。
2. 资源

Web 服务器 是 Web资源(Web resource)的宿主。Web 资源是 Web 内容 的源头。最简单的 Web 资源 就是 Web 服务器 文件系统中的 静态文件。这些文件可以 包含任意内容:文本文件、HTML文件、JPEG图片文件、AVI电影文件等。
资源 还可以是根据 需要生成内容的 软件程序。这些 动态内容资源 可以 根据你的身份、所请求的信息 或 每天的 不同时段来 产生内容。
3. URI

每个 Web 服务器资源 都有一个 名字。服务器资源名 被称为 统一资源 标识符(Uniform Resource Identifier, URI)。URI 就像因特网上的 邮政地址一样,在 世界范围内 唯一 标识 并定位信息资源。
4. URL

统一资源定位符(URL)是 资源标识符 最常见的形式。URL 描述了 一台 特定服务器上 某资源的 特定位置。它们 可以明确 说明如何 从一个精确、固定的位置 获取资源。
5. 事务

一个 HTTP 事务 由一条(从客户端发往服务器的)请求命令 和 一个(从服务器发回 客户端的)响应结果 组成。这种通信 是通过名为 HTTP 报文(HTTP message)的格式化 数据块 进行的。
应用程序完成一项任务时通常会发布多个HTTP事务。一个“Web页面”通常并不是单个资源,而是一组资源的集合。
6. 方法

每条 HTTP 请求报文 都包含 一个方法。这个方法 会告诉服务器 要执行什么动作(获取一个 Web 页面、运行一个 网关程序、删除一个文件等)。
7. 状态码

每条 HTTP 响应报文 返回时都会 携带一个 状态码。状态码 是一个 三位数字的 代码,告知 客户端请求 是否成功,或者 是否需要 采取其他动作。
二、HTTP报文
HTTP 报文 是在 HTTP 应用程序 之间发送的 数据块。这些数据块 以一些文本形式的 元信息(meta-information)开头,这些信息 描述了报文的 内容及含义,后面 跟着可选的 数据部分。这些报文在 客户端、服务器 和 代理之间流动。术语 “流入”、“流出”、“上游” 及 “下游” 都是用来描述报文方向的。
1. 报文的流动
(1)流入源端服务器

(2)向下游流动

不管是 请求报文 还是 响应报文,所有报文都 会向下游(downstream)流动。所有 报文的 发送者都在 接收者的上游(upstream)。
2. 报文语法
所有的 HTTP 报文 都可以分为 两类:请求报文(request message)和 响应报文(response message)。它们由三个部分组成:对报文进行 描述的 起始行(start line)、包含属性的 首部(header)块,以及可选的、包含 数据的 主体(body)部分。

请求报文会向 Web 服务器 请求一个动作。响应报文会 将请求的结果 返回给 客户端。请求和响应报文的 基本报文结构 相同。


三、TCP连接
世界上几乎所有的 HTTP 通信 都是由 TCP/IP 承载的,TCP/IP 是全球计算机 及 网络设备 都在使用的一种常用的 分组交换网络分层 协议集。客户端 应用程序 可以 打开一条 TCP/IP 连接,连接到 可能运行 在世界任何地方 的服务器 应用程序。一旦 连接建立 起来了,在客户端 和 服务器的 计算机之间交换的 报文 就永远 不会丢失、受损或失序。
连接步骤简述:
第(1)~(3)步 会将 服务器的 IP 地址 和 端口号从 URL 中分离出来。在 第(4)步 中 建立到Web 服务器的 TCP 连接,并在 第(5)步 通过 这条连接 发送一条 请求报文。在 第(6)步 读取响应,并在 第(7)步 关闭连接。
1. TCP传输方式
TCP 为 HTTP 提供了 一条可靠的 比特传输管道。从 TCP 连接一端填入的字节 会从 另一端以 原有的顺序、正确地 传送出来。

TCP 的数据是 通过名为 IP分组(或 IP 数据报)的 小数据块 来发送的。HTTP 就是 “HTTP over TCP over IP” 这个 “协议栈” 中的最顶层。其安全版本 HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TLS 或 SSL 的)密码加密层。

HTTP 要传送 一条报文 时,会以 流的形式 将报文数据的 内容 通过一条 打开的 TCP 连接 按序传输。TCP 收到数据流 之后,会 将数据流砍成 被称作段的 小数据块,并 将段封装在 IP 分组中,通过因特网 进行传输。
所有 这些工作都是由 TCP/IP 软件 来处理的,HTTP 程序员什么都看不到。

每个 TCP 段 都是由 IP 分组 承载,从一个 IP 地址 发送到 另一个 IP 地址 的。每个 IP 分组 中都包括:一个IP分组首部、一个TCP段首部、 一个TCP数据块。
IP 首部 包含了 源目的 IP 地址、长度和其他一些标记。TCP 段 的首部包含了 TCP 端口号、TCP 控制标记,以及 用于数据排序 和 完整性检查的 一些数字值。
2. TCP连接状态
在任意时刻 计算机 都可以 有几条 TCP 连接 处于 打开状态。TCP 是通过 端口号 来保持 所有 这些连接持续 不断地运行。IP 地址 可以将你连接到 正确的计算机,而 端口号 则可以 将你连接到 正确的应用程序上去。
TCP连接是通过 4 个 值来识别的:
<源IP地址、源端口号、目的IP地址、目的端口号>
这 4 个值 一起唯一地 定义了 一条连接。两条不同的 TCP 连接 不能拥有 4 个完全相同 的地址组件值(但不同连接的部分组件可以拥有相同的值)。


3. 套接字
套接字 API 允许用户创建 TCP 的端点 数据结构,将 这些端点 与 远程服务器的 TCP 端点 进行连接,并 对数据流进行 读写。TCP API 隐藏了 所有底层网络协议的 握手细节,以及 TCP 数据流 与 IP 分组之间的 分段 和 重装细节。


上图中,客户端根据 URL 判定出 IP 地址 和 端口号,并建立一条 到服务器的 TCP 连接(C3)。建立连接可能要 花费一些时间,时间 长短取决于 服务器距离的 远近、服务器的 负载情况,以及 因特网的 拥挤程度。
一旦建立了连接,客户端 就会发送 HTTP请求(C5),服务器 则会 读取请求(S6)。一旦服务器 获取了 整条 请求报文,就会 对请求 进行处理,执行 所请求的 动作(S7),并 将数据写回 客户端。客户端 读取数据(C6),并对 响应数据 进行处理(C7)。
4. TCP连接三次握手

- 请求新的 TCP 连接时,客户端要向服务器 发送一个 小的 TCP 分组。这个 分组中 设置了一个特殊的 SYN 标记,说明这是一个连接请求(a)。
- 如果 服务器接受了 连接,就会 对一些连接参数 进行计算,并向 客户端 回送一个 TCP 分组,这个分组中的 SYN 和 ACK 标记 都被置位,说明连接请求 已被接受(b)。
- 最后,客户端 向服务器 回送一条 确认信息,通知它 连接已 成功建立(c)。现代的 TCP 栈 都允许客户端 在这个确认分组中 发送数据。
HTTP 程序员 永远 不会看到这些分组——这些分组都由 TCP/IP 软件管理,对其是 不可见的。HTTP 程序员 看到的 只是创建 TCP 连接时 存在的时延。
相关文章:
【Linux篇】Http协议(1)(笔记)
目录 一、http基本认识 1. Web客户端和服务器 2. 资源 3. URI 4. URL 5. 事务 6. 方法 7. 状态码 二、HTTP报文 1. 报文的流动 (1)流入源端服务器 (2)向下游流动 2. 报文语法 三、TCP连接 1. TCP传输方式 2. TCP连…...
员工疯狂打CALL!解锁企业微信新玩法,2024年必学秘籍来啦!
现在工作离不开电脑手机,公司交流也得用新招。腾讯出了个企业微信,就是给公司用的聊天工具。它功能强大,操作简便,很多公司用它来让工作更高效,团队合作更紧密。接下来,我会简单说说怎么上手企业微信&#…...
Spring boot从0到1 - day01
前言 Spring 框架作为 Java 领域中最受欢迎的开发框架之一,提供了强大的支持来帮助开发者构建高性能、可维护的 Web 应用。 学习目标 Spring 基础 Spring框架是什么?Spring IoC与Aop怎么理解? Spring Boot 的快速构建 Spring 基础 学习…...
Flutter 项目结构的区别
如果需要调用原生代码,请创建一个plugin类型的项目开发。如果需要调用C语言,请参考文档:Flutter项目中调用C语言plugin 其实是 package 的一种,全称是 plugin package,我们简称为 plugin,中文叫插件。 1. A…...
EfficientFormerV2:重新思考视觉变换器以实现与MobileNet相当的尺寸和速度。
摘要 https://arxiv.org/pdf/2212.08059 随着视觉变换器(ViTs)在计算机视觉任务中的成功,近期的研究尝试优化ViTs的性能和复杂度,以实现在移动设备上的高效部署。提出了多种方法来加速注意力机制,改进低效设计…...
ASP.NET Core高效管理字符串集合
我们在开发 Web 项目时经常遇到需要管理各种来源的字符串集合(例如HTTP 标头、查询字符串、设置的值等)的情况。合理的管理这些字符串集合不仅可以减少出bug的几率,也能提高应用程序的性能。ASP.NET Core 为我们提供了一种特殊的只读结构体 S…...
vm-tools的卸载重装,只能复制粘贴,无法拖拽文件!
开始 ubuntu22.04 LTSVMwareTools-10.3.25-20206839.tar.gzVMware Workstation 17 Pro 各种该尝试的配置都尝试了,比如: 1.开启复制粘贴拖拽; 2.VMware Tools拖拽失效; 3.解决VMware无法拖拽. 均没有奏效. 安装过程报错, 报错异常: The installation of VMware Tools 10.3.25…...
Docker 容器网络技术
Docker 容器网络技术 一、概述 Docker 容器技术在微服务架构和云原生应用中扮演着重要角色。容器的轻量化和快速启动特性,使得它们成为现代应用部署的首选。然而,容器的网络连接和管理是一个复杂的问题,尤其是当涉及到容器间通信时。Docker…...
C++ 起始帧数、结束帧数、剪辑视频
C 指定起始帧数、结束帧数、 剪辑视频 C 无法直接用H264,只能用avi编码格式 #include <iostream> #include <opencv2/opencv.hpp>int main() {// 读取视频:创建了一个VideoCapture对象,参数为摄像头编号std::string path &quo…...
【项目一】基于pytest的自动化测试框架———解读requests模块
解读python的requests模块 什么是requests模块基础用法GET与POST的区别数据传递格式会话管理与持久性连接处理相应结果应对HTTPS证书验证错误处理与异常捕获 这篇blog主要聚焦如何使用 Python 中的 requests 模块来实现接口自动化测试。下面我介绍一下 requests 的常用方法、数…...
升级Ubuntu内核的几种方法
注意: Ubuntu主线内核由 Ubuntu 内核团队提供,用于测试和调试目的。 它们不受支持且不适合生产使用。 仅当它们可以解决当前内核遇到的关键问题时,才应该安装它们。 1、手动下载deb文件升级内核 来源:kernel.ubuntu.com/main…...
Android绘制靶面,初步点击位置区域划分取值测试
自定义View: public class TargetView extends View {private Paint paint;private int[] radii {100, 250, 400, 550, 700}; // 五个圆的半径private int numberOfSegments 8;private int[][] regionValues; // 存储每个区域的值public TargetView(Context cont…...
【SpringBoot】调度和执行定时任务--Quartz(超详细)
Quartz 是一个功能强大的任务调度框架,广泛用于在 Java 应用程序中定时执行任务,同时它支持 Cron 表达式、持久化任务、集群等特性。以下是 Quartz 的详细使用教程,包括安装、基本概念、简单示例和高级功能。 1. 安装 Quartz 首先ÿ…...
低代码开发平台系统架构概述
概述 织信低代码开发平台(产品全称:织信Informat)是一款集成了应用设计、运行与管理的综合性平台。它提供了丰富的功能模块,帮助用户快速构建、部署和维护应用程序。织信低代码平台通过集成丰富的功能模块,为用户提供…...
源码编译llama.cpp 、ggml 后端启用自定义BLAS加速
源码编译llama.cpp 、ggml 后端启用自定义BLAS加速 我在llama.cpp 官网上提交了我的解决方案:How to setup OpenBlas on windows? #625 GGML 官网 https://github.com/ggerganov/ggml/issues/959 windows on arm 编译 llama.cpp 、ggml 后端启用自定义BLAS加速 …...
glb数据格式
glb数据格式 glb 文件格式只包含一个glb 文件,文件按照二进制存储,占空间小 浏览 浏览glb工具的很多,ccs,3D查看器等都可以,不安装软件的话用下面网页加载就可以,免费 glTF Viewer (donmccurdy.com) glb…...
手语识别系统源码分享
手语识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …...
Oracle 数据库部署与实施
文章目录 1. macOS 上部署 Oracle 数据库通过 Docker 在 macOS 上部署 2. Linux 上部署 Oracle 数据库直接在 Linux 上部署通过 Docker 在 Linux 上部署 3. Windows 上部署 Oracle 数据库4. 使用 Docker 部署 Oracle 数据库前提条件拉取 Oracle 数据库 Docker 镜像运行 Oracle …...
【Python】 ast.literal_eval 与 eval
一、背景 我在在编写管理后台的过程中,遇到一个小问题,是关于用户名的存储和解码。用户名以base64编码的形式存储在 MySQL 数据库中,并且还保留了b这样的形式,具体为什么要这样存我也不知道,可能是因为有些特殊字符无法直接存储。…...
Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器
文章目录 垃圾回收机制垃圾收集器垃圾收集器分类ZGC 收集器ZGC 的性能优势复制算法指针染色读屏障 ZGC 的工作过程Stop-The-World 暂停阶段并发阶段 垃圾回收机制 垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
KKCMS部署
目录 账号 网站目录 快看CMS使用手册 http://10.141.19.241/kkcms/install/ 常规思路:页面点点观察url变化,参数 常规思路:点一个功能模块抓包看什么东西,正确是什么样,错误的是什么样,构造参数。 账号…...


