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

【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连接三次握手

  1.   请求新的 TCP 连接时,客户端要向服务器 发送一个 小的 TCP 分组。这个 分组中 设置了一个特殊的 SYN 标记,说明这是一个连接请求(a)。
  2.   如果 服务器接受了 连接,就会 对一些连接参数 进行计算,并向 客户端 回送一个 TCP 分组,这个分组中的 SYN 和 ACK 标记 都被置位,说明连接请求 已被接受(b)。
  3.   最后,客户端 向服务器 回送一条 确认信息,通知它 连接已 成功建立(c)。现代的 TCP 栈 都允许客户端 在这个确认分组中 发送数据。

        HTTP 程序员 永远 不会看到这些分组——这些分组都由 TCP/IP 软件管理,对其是 不可见的。HTTP 程序员 看到的 只是创建 TCP 连接时 存在的时延。

相关文章:

【Linux篇】Http协议(1)(笔记)

目录 一、http基本认识 1. Web客户端和服务器 2. 资源 3. URI 4. URL 5. 事务 6. 方法 7. 状态码 二、HTTP报文 1. 报文的流动 &#xff08;1&#xff09;流入源端服务器 &#xff08;2&#xff09;向下游流动 2. 报文语法 三、TCP连接 1. TCP传输方式 2. TCP连…...

员工疯狂打CALL!解锁企业微信新玩法,2024年必学秘籍来啦!

现在工作离不开电脑手机&#xff0c;公司交流也得用新招。腾讯出了个企业微信&#xff0c;就是给公司用的聊天工具。它功能强大&#xff0c;操作简便&#xff0c;很多公司用它来让工作更高效&#xff0c;团队合作更紧密。接下来&#xff0c;我会简单说说怎么上手企业微信&#…...

Spring boot从0到1 - day01

前言 Spring 框架作为 Java 领域中最受欢迎的开发框架之一&#xff0c;提供了强大的支持来帮助开发者构建高性能、可维护的 Web 应用。 学习目标 Spring 基础 Spring框架是什么&#xff1f;Spring IoC与Aop怎么理解&#xff1f; Spring Boot 的快速构建 Spring 基础 学习…...

Flutter 项目结构的区别

如果需要调用原生代码&#xff0c;请创建一个plugin类型的项目开发。如果需要调用C语言&#xff0c;请参考文档&#xff1a;Flutter项目中调用C语言plugin 其实是 package 的一种&#xff0c;全称是 plugin package&#xff0c;我们简称为 plugin&#xff0c;中文叫插件。 1. A…...

EfficientFormerV2:重新思考视觉变换器以实现与MobileNet相当的尺寸和速度。

摘要 https://arxiv.org/pdf/2212.08059 随着视觉变换器&#xff08;ViTs&#xff09;在计算机视觉任务中的成功&#xff0c;近期的研究尝试优化ViTs的性能和复杂度&#xff0c;以实现在移动设备上的高效部署。提出了多种方法来加速注意力机制&#xff0c;改进低效设计&#xf…...

ASP.NET Core高效管理字符串集合

我们在开发 Web 项目时经常遇到需要管理各种来源的字符串集合&#xff08;例如HTTP 标头、查询字符串、设置的值等&#xff09;的情况。合理的管理这些字符串集合不仅可以减少出bug的几率&#xff0c;也能提高应用程序的性能。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 容器技术在微服务架构和云原生应用中扮演着重要角色。容器的轻量化和快速启动特性&#xff0c;使得它们成为现代应用部署的首选。然而&#xff0c;容器的网络连接和管理是一个复杂的问题&#xff0c;尤其是当涉及到容器间通信时。Docker…...

C++ 起始帧数、结束帧数、剪辑视频

C 指定起始帧数、结束帧数、 剪辑视频 C 无法直接用H264&#xff0c;只能用avi编码格式 #include <iostream> #include <opencv2/opencv.hpp>int main() {// 读取视频&#xff1a;创建了一个VideoCapture对象&#xff0c;参数为摄像头编号std::string path &quo…...

【项目一】基于pytest的自动化测试框架———解读requests模块

解读python的requests模块 什么是requests模块基础用法GET与POST的区别数据传递格式会话管理与持久性连接处理相应结果应对HTTPS证书验证错误处理与异常捕获 这篇blog主要聚焦如何使用 Python 中的 requests 模块来实现接口自动化测试。下面我介绍一下 requests 的常用方法、数…...

升级Ubuntu内核的几种方法

注意&#xff1a; Ubuntu主线内核由 Ubuntu 内核团队提供&#xff0c;用于测试和调试目的。 它们不受支持且不适合生产使用。 仅当它们可以解决当前内核遇到的关键问题时&#xff0c;才应该安装它们。 1、手动下载deb文件升级内核 来源&#xff1a;kernel.ubuntu.com/main…...

Android绘制靶面,初步点击位置区域划分取值测试

自定义View&#xff1a; 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 是一个功能强大的任务调度框架&#xff0c;广泛用于在 Java 应用程序中定时执行任务&#xff0c;同时它支持 Cron 表达式、持久化任务、集群等特性。以下是 Quartz 的详细使用教程&#xff0c;包括安装、基本概念、简单示例和高级功能。 1. 安装 Quartz 首先&#xff…...

低代码开发平台系统架构概述

概述 织信低代码开发平台&#xff08;产品全称&#xff1a;织信Informat&#xff09;是一款集成了应用设计、运行与管理的综合性平台。它提供了丰富的功能模块&#xff0c;帮助用户快速构建、部署和维护应用程序。织信低代码平台通过集成丰富的功能模块&#xff0c;为用户提供…...

源码编译llama.cpp 、ggml 后端启用自定义BLAS加速

源码编译llama.cpp 、ggml 后端启用自定义BLAS加速 我在llama.cpp 官网上提交了我的解决方案&#xff1a;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 文件&#xff0c;文件按照二进制存储&#xff0c;占空间小 浏览 浏览glb工具的很多&#xff0c;ccs&#xff0c;3D查看器等都可以&#xff0c;不安装软件的话用下面网页加载就可以&#xff0c;免费 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

一、背景 我在在编写管理后台的过程中&#xff0c;遇到一个小问题&#xff0c;是关于用户名的存储和解码。用户名以base64编码的形式存储在 MySQL 数据库中&#xff0c;并且还保留了b这样的形式&#xff0c;具体为什么要这样存我也不知道,可能是因为有些特殊字符无法直接存储。…...

Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器

文章目录 垃圾回收机制垃圾收集器垃圾收集器分类ZGC 收集器ZGC 的性能优势复制算法指针染色读屏障 ZGC 的工作过程Stop-The-World 暂停阶段并发阶段 垃圾回收机制 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;&#xff0c;顾名思义就是释放垃圾占用的空…...

基于 K8S kubernetes 的常见日志收集方案

目录 1、日志对我们来说到底重不重要&#xff1f; 2、常见的日志收集方案 2.1 EFK 2.2 ELK Stack 2.3 ELKfilebeat 2.4 其他方案 2、elasticsearch组件介绍 3、filebeat组件介绍 3.1 filebeat和beat关系 3.2 filebeat是什么&#xff1f; 3.3 Filebeat工作原理 3.4 …...

Unity3D 小案例 像素贪吃蛇 02 蛇的觅食

Unity3D 小案例 像素贪吃蛇 第二期 蛇的觅食 像素贪吃蛇 食物生成 在场景中创建一个 2D 正方形&#xff0c;调整颜色&#xff0c;添加 Tag 并修改为 Food。 然后拖拽到 Assets 文件夹中变成预制体。 创建食物管理器 FoodManager.cs&#xff0c;添加单例&#xff0c;可以设置…...

【sgCreateCallAPIFunction】自定义小工具:敏捷开发→调用接口方法代码生成工具

<template><div :class"$options.name" class"sgDevTool"><sgHead /><div class"sg-container"><div class"sg-start"><div style"margin-bottom: 10px">调用接口方法定义列表</div…...

京东商品详情的 API 探秘与应用

在当今数字化的商业世界中&#xff0c;获取准确而详细的商品信息对于开发者、商家以及消费者都具有至关重要的意义。京东作为国内领先的电商平台之一&#xff0c;提供了丰富的商品资源和强大的 API 接口&#xff0c;让我们能够轻松获取京东商品的详情信息。本文将带你深入了解如…...

功能测试干了三年,快要废了。。。

8年前刚进入到IT行业&#xff0c;到现在学习软件测试的人越来越多&#xff0c;所以在这我想结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业&#xff0c;导致软件测试已经饱和了&#xff0c;想要获得更好的待…...

【C++】多态的认识和理解

个人主页 文章目录 ⭐一、多态的概念&#x1f384;二、多态的定义及实现1.多态的构成2.实现多态的条件3.虚函数的概念4.虚函数的重写和覆盖5.析构函数的重写6.协变7.override和 final关键字8.重载、重写/覆盖、隐藏这三者的区别 &#x1f3e0;三、纯虚函数和抽象类的关系&#…...

linux-安全管理-用户认证

Linux 安全管理&#xff1a;用户认证 一、概述 用户认证是 Linux 安全管理的核心部分&#xff0c;确保系统能够识别并验证合法用户&#xff0c;同时阻止未经授权的访问。Linux 提供了多种用户认证机制&#xff0c;包括用户名和密码认证、基于密钥的认证、双因素认证&#xff…...

webpack5 构建优化方案看这篇就够了!【Node.js进阶】

无论在面试还是内部晋升&#xff0c;webpack 构建优化方案 一直都是非常重要的部分。 webpack5构建加持 一、项目完成目标二、搭建项目1. 安装koa、koa/router &#xff08;如果已经配置可路过&#xff09;2. 创建入口文件3. 安装构建依赖4. 在项目根目录添加 .babelrc 文件5. …...

esp32-C2 对接火山引擎实现智能语音(一)

目录 一、火山引擎大模型简介 1)火山引擎网址: 2)首先需要先注册火山引擎账号 3)语音识别——即语音转为文本 一句话识别 流式语音识别 录音文件识别标准版 录音文件识别极速版 4)语音合成——文本转音频 一、火山引擎大模型简介 火山引擎的智能语音技术,基于业界先…...

【MySQL-初级】mysql基础操作(账户、数据库、表的增删查改)

概述 数据备份与恢复 数据库备份&#xff1a;在cmd下 root用户&#xff1a;sudo mysqldump -u root -p Test > Test.sql普通用户&#xff1a;mysqldump -u zzz -p db_name > db_name.sql 数据库恢复 先创建一个空的数据库在cmd下&#xff1a;sudo mysql -u root -p d…...