【网络编程】HTTP(超文本传输协议)详解

🦄个人主页:修修修也

🎏所属专栏:网络编程

⚙️操作环境:Visual Studio 2022


目录

📌HTTP定义

📌HTTP工作原理

1.客户端发起请求:

2.服务器处理请求:

3.客户端处理响应:

📌HTTP关键特性

🎏HTTP请求方法

📖Get(获取资源)

📖Post(提交消息)

📖Put(修改数据)

📖Delect(删除数据)

🎏HTTP中Cookie、Session和Token

📖为什么需要Cookie和Session

📖Cookie

📖Session

📖Session-Cookie的典型场景

📖Token

📖小结

📌HTTP版本演进

🎏HTTP/0.9  [1991年]

🎏HTTP/1.0  [1996年]

🎏HTTP/1.1  [1997年]

🎏HTTP/2.0  [2015年]

🎏HTTP/3.0  [2022年] 

📌HTTPS

🎏核心原理

🎏TLS握手过程

结语


📌HTTP定义

        HTTP(HyperText Transfer Protocol)是一种应用层协议, 用于在客户端和服务器之间传输超文本(如网页, 图片, 视频等)。具备以下核心特性:

  • 无状态协议: 每次请求独立, 服务器不保存客户端状态(需通过Cookie/Session扩展状态管理)。
  • 请求-响应模型: 客户端发起请求(Request), 服务器返回响应(Response)。
  • 基于TCP/IP: 默认端口80(HTTP)或443(HTTPS), 依赖TCP保证可靠传输。
  • 可扩展性: 通过Header字段自定义元数据, 支持缓存, 认证, 压缩等功能。

📌HTTP工作原理

1.客户端发起请求:

  •  输入URL, 浏览器解析域名并建立TCP连接。
  • 发送HTTP请求报文, 包含方法, 路径, 协议版本, Headers等。

2.服务器处理请求:

  • 解析请求,定位资源,执行后端逻辑(如查询数据库)。
  • 返回HTTP响应报文,包含状态码(如200)、Headers(如Content-Type)、Body(如HTML内容)。

3.客户端处理响应:

  • 浏览器解析响应内容(如渲染HTML), 关闭或复用TCP连接。

📌HTTP关键特性

🎏HTTP请求方法

📖Get(获取资源)

  • 作用:获取指定资源(通常不修改服务器数据)。
  • 特点
    • 安全:不改变服务器状态。
    • 幂等:多次请求结果相同。
    • 无请求体, 数据通过URL参数传递(如?id=123)。
  • 适用场景: 加载页面内容, 获取静态资源等。

📖Post(提交消息)

  • 作用:向服务器提交数据(通常用于创建资源或触发操作)。
  • 特点
    • 非安全:可能修改服务器状态。
    • 非幂等:重复提交可能产生不同结果(如重复创建订单)。
    • 有请求体, 数据通过请求体(Body)传输,支持多种格式(JSON、表单等)。
  • 适用场景: 提交表单(如用户注册), 上传文件等。

📖Put(修改数据)

  • 作用:替换或完整更新指定资源。
  • 特点
    • 非安全:修改服务器状态。
    • 幂等:多次请求效果等同于一次(如重复更新同一资源)。
    • 有请求体, 需提供完整的资源数据。
  • 适用场景: 更新用户全部信息, 替换已有文件等。

📖Delect(删除数据)

  • 作用:删除指定资源。
  • 特点
    • 非安全:修改服务器状态。
    • 幂等:删除不存在资源仍返回相同结果。
  • 适用场景: 删除数据库记录, 移除服务器上的文件。

🎏HTTP中Cookie、Session和Token

📖为什么需要Cookie和Session

        HTTP 是无状态协议,每个请求独立处理,服务器默认不会记录之前的请求信息。这导致以下挑战:

  1. 无法跟踪用户身份:用户登录后,服务器不知道后续请求来自同一用户。
  2. 无法保存用户操作状态:例如购物车内容、页面偏好设置等无法跨请求保留。
  3. 无法实现个性化服务:无法根据用户历史行为动态调整内容(如推荐系统)。

Cookie 和 Session 的共同目标:​在无状态的 HTTP 协议上实现有状态的用户会话管理


📖Cookie

  • Cookie解决客户端状态存储, 主要解决用户偏好(如语言、主题)或临时数据(如未登录时的购物车)需长期或短期保存的问题。
  • 解决方案: Cookie 将数据存储在客户端(浏览器),每次请求自动携带。
  • Cookie解决服务器需要识别同一用户的多次请求的问题。
  • 解决方案: Cookie 存储 Session ID,作为用户身份的唯一标识。

📖Session

  • Session解决用户的敏感信息(如登录凭证、权限角色)不能暴露在客户端的问题。
  • 解决方案:Session 数据存储在服务器(内存、数据库或缓存如 Redis),仅通过 Cookie 传递安全的 Session ID。
  • Session解决Cookie 有大小限制(约 4KB),无法存储复杂数据的问题。
  • 解决方案: Session 在服务端存储用户完整数据(如购物车商品列表、多步骤表单填写内容)。
  • Session解决客户端数据易被篡改(如用户伪造身份提升权限)的问题。
  • 解决方案: Session ID 通过 HttpOnly 和 Secure Cookie 传输,防止 XSS 和中间人攻击。服务端验证 Session ID 合法性,绑定 IP 或设备指纹防止盗用。

📖Session-Cookie的典型场景

        下面介绍一下用户登录时Cookie和Session的协同工作场景

1.登录请求(http请求信息):

POST /login HTTP/1.1
Content-Type: application/json{"username": "alice", "password": "123456"}

2.服务器验证:生成 Session 数据并返回 Session ID 到 Cookie。

HTTP/1.1 200 OK
Set-Cookie: session_id=xyz789; HttpOnly; Secure; Path=/

3.后续请求:浏览器自动携带 Session ID,服务器查询 Session 数据识别用户。

GET /dashboard HTTP/1.1
Cookie: session_id=xyz789

📖Token

        由于服务器可能会有繁忙需要将部分用户转移给别的服务器分担压力的情况, 那保存在A服务器的Session_id就要一起转交给B服务器, 否则用户发新的请求就还需要重新登陆验证, 这样非常麻烦, 如果把Session_id都统一存放在数据库里呢, 又怕数据库过载不安全, 于是为了解决这个问题, 又引入了新的解决方案, 就是Token。

        Token​(令牌)是一种用于身份验证和授权的凭证,通常由服务器生成并返回给客户端。客户端在后续请求中携带 Token,供服务器验证身份。

核心特点

  • 无状态:服务器无需存储 Token,验证基于签名或加密。
  • 自包含:Token 可携带用户信息(如用户ID、权限)。
  • 跨域友好:适合前后端分离、微服务架构。

常见类型

  • JWT(JSON Web Token)​:标准化、自包含的 Token 格式。
  • OAuth Token:用于第三方授权(如使用微信登录)。
  • Access Token/Refresh Token:短效令牌与长效刷新令牌组合。

📖小结

        Session是诞生并保存在服务器里的, 由服务器主导一切, 而Cookie则是一种数据载体, 把Session放入Cookie中送到客户端那边, Cookie跟随每个HTTP请求发送出去, 以便服务器识别用户身份。

        Token是诞生在服务器, 但是保存在浏览器这边的, 由客户端主导一切, 可以放在Cookie或者Storage里面, 持有Token就像持有"令牌"一样可以允许访问服务器。


📌HTTP版本演进

🎏HTTP/0.9  [1991年]

特点

  • 极简设计:仅支持 GET 方法,无请求头(Header)和状态码。
  • 纯文本传输:直接返回 HTML 内容,无图片、CSS 等资源支持。

局限

  • 无错误处理,无法扩展。

🎏HTTP/1.0  [1996年]

  • 核心改进
    • 引入请求头/响应头:支持元数据(如 Content-TypeUser-Agent)。
    • 状态码:如 200 OK404 Not Found
    • 多方法支持:新增 POSTHEAD 方法。
    • 版本标识:请求中需声明 HTTP/1.0
  • 问题
    • 短连接:每个请求需新建 TCP 连接(三次握手开销大)。
    • 无 Host 头:无法支持虚拟主机(单 IP 多域名)。

🎏HTTP/1.1  [1997年]

  • 里程碑改进
    • 持久连接(Keep-Alive)​:默认复用 TCP 连接,通过 Connection: keep-alive 管理。
    • 管道化(Pipelining)​:允许连续发送多个请求(但响应必须按序返回,存在队头阻塞)。
    • Host 头:支持单服务器托管多域名。
    • 缓存控制:引入 Cache-ControlETag 等头字段。
    • 分块传输:通过 Transfer-Encoding: chunked 支持流式传输。
  • 遗留问题
    • 队头阻塞(Head-of-Line Blocking):管道化未完全解决请求/响应队列阻塞。
    • 头部冗余:重复头部字段(如 Cookie)浪费带宽。

🎏HTTP/2.0  [2015年]

  • 核心优化
    • 二进制分帧(Binary Framing)​:将数据拆分为更小的二进制帧,提升传输效率。
    • 多路复用(Multiplexing)​:单连接并行处理多个请求/响应,彻底解决队头阻塞。
    • 头部压缩(HPACK)​:减少头部大小(如静态表、动态表编码)。
    • 服务器推送(Server Push)​:主动推送客户端可能需要的资源(如 CSS/JS 文件)。
    • 流优先级:允许客户端指定资源加载优先级。
  • 示例
    • 一个 TCP 连接同时传输 HTML、CSS、图片,无需等待前序请求完成。
  • 局限
    • TCP 层队头阻塞:若单个 TCP 包丢失,所有流需等待重传。

🎏HTTP/3.0  [2022年] 

  • 革命性变革
    • 基于 QUIC 协议:弃用 TCP,改用 UDP 实现可靠传输,内置加密(TLS 1.3)。
    • 解决 TCP 队头阻塞:每个流独立传输,丢包仅影响单个流。
    • 0-RTT 连接:首次连接即可发送数据(复用之前会话的加密信息)。
    • 连接迁移:网络切换(如 Wi-Fi → 4G)时无需重建连接。
  • 优势场景
    • 高延迟网络(如卫星通信)、移动网络(频繁切换基站)。
  • 挑战
    • 运营商对 UDP 的支持策略可能影响普及。

📌HTTPS

         HTTPS(HyperText ​Transfer ​Protocol ​Secure)是 HTTP 的安全版本,通过在 HTTP 和 TCP 层之间引入 ​SSL/TLS 加密层,解决 HTTP 明文传输的安全隐患,保护数据隐私和完整性。默认端口: 443。


🎏核心原理

  1. 加密通信

    • 混合加密机制
      • 非对称加密:用于密钥交换(如 RSA、ECDHE),确保初始握手安全。
      • 对称加密:用于数据传输(如 AES、ChaCha20),提高加密效率。
    • 示例:客户端生成临时密钥(Pre-Master Secret),用服务器公钥加密后传输,双方基于此生成对称加密密钥。
  2. 身份验证

    • 数字证书:由受信任的证书颁发机构(CA)签发,包含服务器公钥和域名信息。
    • 验证流程
      1. 客户端验证证书是否过期、域名匹配、签发机构可信。
      2. 检查证书链是否完整(根证书 → 中间证书 → 服务器证书)。
  3. 数据完整性

    • MAC(消息认证码)​ 或 ​HMAC:防止数据在传输中被篡改。
    • TLS 记录协议:对每个数据块计算哈希值,接收方验证一致性。

🎏TLS握手过程

一次完整的 HTTPS 连接需经历以下步骤(以 TLS 1.3 为例):

  1. Client Hello
    • 客户端发送支持的 TLS 版本、加密套件列表、随机数(Client Random)。
  2. Server Hello
    • 服务器选择加密套件,发送随机数(Server Random)、证书、公钥。
    • TLS 1.3 优化:省略不必要的协商步骤(如密钥交换参数)。
  3. 密钥交换
    • 客户端生成 Pre-Master Secret,用服务器公钥加密后发送。
    • 双方基于 Client Random、Server Random 和 Pre-Master Secret 生成会话密钥。
  4. 完成握手
    • 双方发送加密的 Finished 消息,确认握手成功,后续数据均加密传输。

握手耗时优化

  • Session Resumption:复用之前会话的密钥(通过 Session ID 或 Session Ticket)。
  • 0-RTT(TLS 1.3)​:首次连接即可发送加密数据,降低延迟。

结语

希望这篇关于 HTTP协议 的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.

学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!

相关文章推荐

【网络编程】正则表达式快速上手指南

【网络编程】搭建一个简单的UDP通信服务器和客户端


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

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

相关文章

Centos小白之在CentOS8.5中安装Rabbitmq 3.10.8

注意事项 安装以及运行等其他操作,要使用root账号进行,否则会遇到很多麻烦的事情。 使用命令行进行远程登录 ssh root192.168.0.167 安装make 执行安装命令 yum -y install make gcc gcc-c kernel-devel m4 ncurses-devel openssl-devel这里有可能会…

SQL笔记——左连接、右连接、内连接

前言:总是忘记表连接的区别,在面试的时候也容易被问到,因此就好记性不如烂笔头吧 集合运算 有并集、交集、差集 联合查询*(针对行合并的)* union为关键字,就是将两个select的结果求并集(此时重…

LeetCode - 19.删除链表的倒数第N个结点

目录 题目 解法一 双指针算法 核心思想 执行流程 具体例子 代码 解法二 两次遍历法 核心思想 执行流程 具体例子 代码 题目 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 解法一 双指针算法 核心思想 利用双指针间隔固定距离(n1)&a…

C# 编程核心:控制流与方法调用详解

在编程中,控制流和方法调用是构建程序逻辑的两大基石。它们决定了代码的执行顺序和模块化协作方式。本文将从基础概念出发,结合代码示例,深入解析这两部分内容。 控制流:程序执行的指挥棒 控制流决定了代码的执行路径&#xff0…

Sentinel学习

sentinel是阿里巴巴研发的一款微服务组件,主要为用户提供服务保护,包括限流熔断等措施 (一)主要功能 流量控制(限流):比如限制1s内有多少请求能到达服务器,防止大量请求打崩服务器…

Linux中进程的属性:进程优先级

一、优先级和进程优先级 1.1什么是优先级 优先级就是获取某种资源的先后顺序,比如打饭时排队:排队就是在确认优先级 1.2为什么要有优先级 本质上其实是目标资源相对于需求者来说比较少,如CPU,磁盘,显示器&#xff…

基于LangChain 实现 Advanced RAG-后检索优化(上)-Reranker

摘要 Advanced RAG 的后检索优化,是指在检索环节完成后、最终响应生成前,通过一系列策略与技术对检索结果进行深度处理,旨在显著提升生成内容的相关性与质量。在这些优化手段中,重排序优化(Reranker)作为核…

【云备份】热点管理模块

目录 1.热点管理文件的基本思路 2.热点管理类的设计 3.热点管理类的实现 1.热点管理文件的基本思路 服务器端的热点文件管理是对上传的非热点文件进行压缩存储,节省磁盘空间。 而热点文件的判断在于上传的文件的最后一次访问时间是否在热点判断时间之内。 实…

LeetCode 560. 和为 K 的子数组 | 前缀和与哈希表的巧妙应用

文章目录 方法思路:前缀和 哈希表核心思想关键步骤 代码实现复杂度分析示例解析总结 题目描述 给定一个整数数组 nums 和一个整数 k,请统计并返回该数组中和为 k 的子数组的数量。 子数组是数组中连续的非空元素序列。 示例 输入:nums …

Windows配置grpc

Windows配置grpc 方法一1. 使用git下载grph下载速度慢可以使用国内镜像1.1 更新子模块 2. 使用Cmake进行编译2.1 GUI编译2.2 命令行直接编译 3. 使用Visual Studio 生成解决方法 方法二1. 安装 vcpkg3.配置vckg的环境变量2. 使用 vcpkg 安装 gRPC3. 安装 Protobuf4. 配置 CMake…

【算法基础】快速排序算法 - JAVA

一、算法基础 1.1 什么是快速排序 快速排序(Quick Sort)是一种高效的分治排序算法,由英国计算机科学家Tony Hoare于1960年提出。它的核心思想是: 选择一个基准元素(pivot)将数组分成两部分:小…

Linux用户管理命令和用户组管理命令

一、用户管理命令 1.1、adduser 添加新用户 1、基本语法 adduser 用户名 (功能描述:添加新用户) 应用场景1:企业开发,多人协同(也会有多人使用相同的一个低权限用户)。 应用场景2&#x…

记录两个免费开源又好用的后台模版vue3

一.element-plus-admin 一套基于vue3、element-plus、typesScript、vite的后台集成方案 1.简介 vue-element-plus-admin 是一个基于 element-plus 免费开源的中后台模版。使用了最新的 Vue3,Vite,Typescript等主流技术开发,开箱即用的中后…

Flip PDF Plus Corp7.7.22电子书制作软件

flip pdf plus corporate7.7.22中文版由FlipBuilder官方出品的一款企业级的翻页电子书制作软件,拥有丰富的模板,主题和动画场景,每本书最大页数1000页,每本书的最大大小1GB,即可以帮助企业用户制作好丰富的电子书籍。 …

C语言蓝桥杯真题代码

以下是不同届蓝桥杯C语言真题代码示例,供参考: 第十三届蓝桥杯省赛 C语言大学B组 真题:卡片 题目:小蓝有很多数字卡片,每张卡片上都是数字1-9。他想拼出1到n的数列,每张卡片只能用一次,求最大的…

[Windows] Kazumi番剧采集v1.6.9:支持自定义规则+在线观看+弹幕,跨平台下载

[Windows] Kazumi番剧采集 链接:https://pan.xunlei.com/s/VOPLMhEQD7qixvAnoy73NUK9A1?pwdtu6i# Kazumi是一款基于框架; 开发的轻量级番剧采集工具,专为ACG爱好者设计。通过;自定义XPath规则; 实现精准内容抓取,支持多平台(An…

探秘数据结构:构建高效算法的灵魂密码

摘要 数据结构作为计算机科学的基石,其设计与优化直接影响算法效率、资源利用和系统可靠性。本文系统阐述数据结构的基础理论、分类及其核心操作,涵盖数组、链表、栈、队列、树、图、哈希表与堆等经典类型。深入探讨各结构的应用场景与性能对比&#xf…

机器人--架构及设备

机器人的四大组成部分 控制系统 驱控系统 执行系统 电机属于执行系统的设备。 传感系统 传感系统分为内部传感系统和外部传感系统。 内部传感系统(内部传感器): 用于获取机器人内部信息,比如IMU,力传感器等。 外部传感系统(外部传感器):…

人工智能:如何快速筛选出excel中某列存在跳号的单元格位置?

前提: 电脑上必须提前安装好了【office AI】软件工具 方法如下: 1、打开要操作的excel表格,点击上方的【officeAI】,再点击左边的【右侧面板】按钮,就会出现如下右侧的【OfficeAI助手】 2、在OfficeAI助手的聊天框…

Spring MVC入门

介绍了Spring MVC框架的概念、特征及核心功能,通过案例详细介绍了Spring MVC开发所需要的开发环境以及基本的开发步骤。 一、Spring MVC框架概述 Spring MVC是Spring框架的一个模块,是一个基于Java的实现了MVC设计模式的轻量级Web框架。它通过一套注解和…