【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 连接时 存在的时延。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426406.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3.0组合式API:使用defineEmits()实现子组件向父组件传递数据

1、使用 defineEmits() 函数 父组件通过使用 Prop 为子组件传递数据&#xff0c;但如果子组件要把数据传递回去&#xff0c;就需要使用自定义事件来实现。父组件可以通过 v-on 指令&#xff08;简写形式“”&#xff09;监听子组件实例的自定义事件&#xff0c;而子组件可以通…

高密原型验证系统解决方案(下篇)

0 引言 我们在上篇中和大家探讨了用户在进行大规模 复杂 SoC 设计原型验证时在全局时钟及复位同步&#xff0c; 大规模设计分割以及高速接口与先进 Memory 控制 器 IP 验证等方面遇到的关键困难&#xff0c;并提出了相应的 解决方案帮助用户来克服这些困难。接下来我们会 和用户…

PDF扫描版文字识别OCR

PDF扫描版文字识别OCR 最近需要有对PDF扫描版进行文字可识别的需求&#xff0c;这里介绍一款工具挺好用的 这是一款开源的OCR工具 github地址 https://github.com/hiroi-sora/Umi-OCR 主要功能及特点 免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#…

二叉树的广度优先遍历和题目

二叉树广度优先遍历利用队列 。 typedef char BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode; typedef BTNode* QDataType;// 链式结构&#xff1a;表示队列 typedef struct QueueNode {…

如何使用宝塔面板安装中间件

如何快速安装中间件&#xff0c;宝塔镇河妖非常简单。 使用 SSH 连接工具&#xff0c;如堡塔SSH终端连接到您的 Linux 服务器后&#xff0c;挂载磁盘&#xff0c;根据系统执行相应命令开始安装&#xff08;大约2分钟完成面板安装&#xff09;&#xff1a; Centos安装脚本 yum…

视频去重剪辑软件哪个好用?这3款工具值得一试!

很多人都喜欢在视频平台上分享自己的剪辑作品。随着视频数量的激增&#xff0c;视频去重成为了一个不可忽视的问题。无论是为了遵守版权法规&#xff0c;还是为了提升内容的独特性和吸引力&#xff0c;选择一款好用的视频去重剪辑软件都显得尤为重要。本文将推荐几款优秀的视频…

YOLOv8 OBB win10+ visual 2022移植部署

前言 想做一个目标旋转角度检测的工程&#xff0c;但是网上多少python的&#xff0c;或者linux的。在win10 visual 2022移植部署&#xff0c;记录一下。 参考 这篇文章没有C win10 环境下的部署教程&#xff0c;我相对于是对此做了补充。 1、下载工程 https://github.com/sh…

21章 规则集和映射

1.同20章 线性表、栈、队列和优先队列的第10题。 2.同20章 线性表、栈、队列和优先队列的第1题。 3.修改程序清单21-7中的程序。如果关键字在注释或者字符串中&#xff0c;则不进行统计。将Java文件名从命令行传递。 import java.io.*; import java.util.Arrays; import jav…

DeDeCMS靶场漏洞复现

打开靶场地址 姿势一&#xff1a;通过文件管理器上传webshell 1.登录后台 dedecms默认的后台登录地址为/dede 2.在附加管理里的文件式管理器中有文件上传 3.上传木马文件 4.访问木马文件 并连接 姿势二&#xff1a;修改模板文件获取webshell 1.点击模板里面的默认模板管理 …

SHL笔试测评系统题库考什么?如何通过综合测评|附性格测试104道

嘿&#xff0c;各位求职小伙伴们&#xff01;我是职小豚&#xff0c;今天就来带大家深入了解神秘又充满挑战的 SHL 笔试测评系统。 一、SHL 人才测评系统介绍 SHL 呀&#xff0c;那可是人才测评领域的超级大明星&#xff01;就像一个智慧的魔法师&#xff0c;用各种神奇的题目…

c++11标准(2)右值引用的衍生产物

欢迎来到博主的专栏&#xff1a;c杂谈 博主ID&#xff1a;代码小豪 文章目录 万能引用模板右值引用到底是左值还是右值完美转发 万能引用模板 当c11推出右值引用之后&#xff0c;我们所写的模板函数可以写成这样&#xff1a; template<class T> T&& Universal_…

[000-01-008].第08节:Sentinel 环境搭建

1.Sentinel的构成&#xff1a; 核心库-后台默认的端口是8719控制台-前台默认的是8080端口 2.2.搭建Sentinel环境&#xff1a; a.下载Sentinel&#xff1a; 1.sentinel官方提供了UI控制台&#xff0c;方便我们对系统做限流设置。可以在GitHub下载 b.下载后运行Sentinel&#…

【virtuoso】AMS数模混合仿真

一、新建Verilog文件 1.1 新建functional 文件 1.2 编写Verilog文件 module phv (ckv ,rst_n ,phv_n );input ckv ;input rst_n ;output reg [10:0] phv_n;always (posedge ckv) beginif(rst_n)phv_n < 11b0;elsephv_n <…

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

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

纯血鸿蒙NEXT常用的几个官方网站

一、官方文档 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/Readme-CN.md刚入门查看最多的就是UI开发模块&#xff0c;首先要熟悉组件使用 二、官方API参考 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/development-i…

JVM 调优篇7 调优案例2-元空间的优化解决

一 元空间 1.1 功能概述 方法区&#xff08;Method Area&#xff09;与 Java 堆一样&#xff0c;是各个线程共享的内存区域&#xff0c;它用于存储已被虚拟机加载的类信息、常量、即时编译器编译后的代码等数据。虽然Java 虚拟机规范把方法区描述为堆的一个逻辑部分&#xf…

【操作系统】二、进程管理:4.死锁(银行家算法、系统安全状态、静态分配策略、资源有序分配法)

五、死锁 文章目录 五、死锁1.产生1.1产生情况1.2产生的4个必要条件 2.处理方式2.1预防死锁2.1.1破坏互斥条件2.1.2破坏请求和保持条件2.1.3破坏不可抢占条件2.1.4破坏循环等待条件 2.2避免死锁2.2.1系统安全状态❗2.2.2银行家算法 2.3检测死锁2.4解除死锁 死锁&#xff1a;资源…

ubuntu安装wordpress(基于LNMP环境)

参考链接 Ubuntu安装LNMP 安装步骤 环境需要LNMP环境&#xff0c;如果没有安装可以参考ZATA—LNMP简单安装 在mysql中设置wordpress所用的用户名和密码 #1. 登录mysql mysql -uroot -p #2. 创建wordpress数据库 create database wordpress; #3. 创建新用户user&#xff0c;…

使用Java实现一个简单的B树

1.B树简介 B树是一个搜索树&#xff0c;数据结构可以抽象成如二叉树一样的树&#xff0c;不过它有平衡、有序、多路的特点。 平衡&#xff1a;所有叶子节点都在同一层。有序&#xff1a;任一元素的左子树都小于它&#xff0c;右子树都大于它。多路&#xff1a;B树的每个节点最多…

【Linux】文件权限与类型全解:你的文件安全指南

欢迎来到 CILMY23 的博客 &#x1f3c6;本篇主题为&#xff1a;文件权限与类型全解&#xff1a;你的文件安全指南 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题…