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

一个完整的 HTTP/HTTPS 请求流程

HTTP

一个完整的 HTTP 请求流程可以分为以下几个步骤:

1. DNS 解析

  • 当客户端(通常是浏览器)输入 URL(例如 https://www.example.com)时,它首先需要解析出对应的 IP 地址。
  • 这个过程涉及 DNS(域名系统),浏览器会查询本地缓存、系统缓存,或者向 DNS 服务器发送请求,最终获取到 www.example.com 的 IP 地址(如 192.168.1.1)。

2. 建立 TCP 连接

  • 通过 三次握手 与服务器建立 TCP 连接:
    1. 客户端发送 SYN(同步)请求。
    2. 服务器返回 SYN + ACK(同步确认)。
    3. 客户端发送 ACK(确认),连接建立成功。

3. 发送 HTTP 请求

客户端向服务器发送 HTTP 请求,主要包括:

  • 请求行(Request Line):
    • GET /index.html HTTP/1.1
  • 请求头(Headers):
    • Host: www.example.com
    • User-Agent: Mozilla/5.0
    • Accept: text/html
    • Connection: keep-alive
  • 请求体(Body):
    • 仅在 POSTPUT 等请求方法时才有,例如 JSON 数据、表单数据等。

4. 服务器处理请求

  • 服务器解析请求:
    • 检查 URL 路由
    • 验证权限
    • 查询数据库
    • 处理业务逻辑
  • 服务器生成 HTTP 响应。

5. 服务器返回 HTTP 响应

服务器返回 HTTP 响应,主要包括:

  • 状态行
    • HTTP/1.1 200 OK
  • 响应头
    • Content-Type: text/html; charset=UTF-8
    • Content-Length: 1024
    • Set-Cookie: sessionId=abc123; Path=/
  • 响应体(Body):
    • 例如 HTML 页面内容、JSON 数据等。

6. 浏览器解析 & 渲染

  • 浏览器解析 HTML、CSS、JavaScript,并开始渲染页面。
  • 如果遇到额外的资源(如 CSS、JS、图片),浏览器会再次发起 HTTP 请求获取这些资源。

7. 连接关闭

  • HTTP/1.1 默认使用 Keep-Alive,可以复用 TCP 连接。
  • 如果 Connection: close,则服务器和客户端会进行 四次挥手 关闭 TCP 连接。

8. 用户交互 & 进一步请求

  • 用户可能会点击页面上的链接,触发新的 HTTP 请求,重复上述过程。

这就是一个完整的 HTTP 请求流程! 🚀

HTTPS

完整的 HTTPS 请求流程

HTTPS(HyperText Transfer Protocol Secure)是在 HTTP 的基础上增加了 SSL/TLS 加密,以保证数据的安全性。相比 HTTP,HTTPS 主要增加了 SSL/TLS 握手 过程。完整的 HTTPS 请求流程如下:

1. DNS 解析

  • 作用:将域名解析为 IP 地址,和 HTTP 一样。
  • 过程
    • 浏览器先查询本地 DNS 缓存
    • 若无结果,向系统 DNS 服务器或公共 DNS(如 8.8.8.8)发起查询
    • DNS 服务器返回 example.com -> 192.168.1.1

2. 建立 TCP 连接

  • 通过 三次握手 建立 TCP 连接(和 HTTP 相同)。
    1. 客户端发送 SYN
    2. 服务器响应 SYN + ACK
    3. 客户端发送 ACK
  • 目的:保证客户端和服务器都能发送和接收数据。

3. SSL/TLS 握手(HTTPS 独有)

在 TCP 连接建立后,客户端和服务器通过 TLS(Transport Layer Security)/SSL(Secure Sockets Layer) 进行安全通信:

  1. 客户端发送 ClientHello
    • 指定支持的 TLS 版本(如 TLS 1.2 / TLS 1.3)
    • 支持的加密算法(Cipher Suites)
    • 生成的随机数(用于后续密钥计算)
  2. 服务器响应 ServerHello
    • 确定 TLS 版本
    • 选择加密算法
    • 生成随机数
    • 发送 SSL 证书(包含服务器公钥)
  3. 客户端验证服务器证书
    • 检查证书是否可信(是否由受信 CA 签发)
    • 证书是否过期
    • 证书的域名是否匹配
  4. 密钥交换
    • 客户端使用服务器公钥加密一个对称密钥(用于数据加密)
    • 服务器用自己的私钥解密,获得对称密钥
    • 后续通信将使用这个对称密钥进行加密
  5. 握手完成
    • 客户端和服务器发送 Finished 消息,表示握手完成
    • 之后的 HTTP 请求/响应都通过 TLS 加密通道传输

4. 发送 HTTPS 请求

  • 请求格式 与 HTTP 相同,但数据已经加密:
    • GET /index.html HTTP/1.1
    • Host: www.example.com
    • User-Agent: Mozilla/5.0
    • Accept: text/html
    • Authorization: Bearer token

5. 服务器处理请求

  • 解密 HTTPS 请求
  • 解析 HTTP 请求
  • 处理业务逻辑(如数据库查询、身份验证)
  • 生成 HTTP 响应

6. 服务器返回 HTTPS 响应

  • 响应数据通过 对称密钥加密 后传输
  • 响应格式(加密传输):
    • HTTP/1.1 200 OK
    • Content-Type: text/html
    • Set-Cookie: sessionId=abc123
    • Body: <html>...</html>

7. 浏览器解析 & 渲染

  • 浏览器解密 HTTPS 响应,解析 HTML/CSS/JS
  • 发现额外资源(如 CSS、JS、图片),再次发起 HTTPS 请求(重复上述流程)

8. 连接关闭

  • Keep-Alive 模式:TCP 连接可以复用,减少握手开销
  • 关闭连接
    • Connection: close,则通过 四次挥手 关闭 TCP 连接

HTTPS 相比 HTTP 的优势

数据加密(防止窃听)
身份验证(防止伪造服务器)
数据完整性(防止中间人篡改数据)

HTTPS 比 HTTP 更安全,但也有 握手开销,导致首次请求稍慢。不过,现代优化技术(如 TLS 1.3、Session Resumption)已经大大减少了这个影响。

🚀 这就是 HTTPS 的完整请求流程!

相关文章:

一个完整的 HTTP/HTTPS 请求流程

HTTP 一个完整的 HTTP 请求流程可以分为以下几个步骤&#xff1a; 1. DNS 解析 当客户端&#xff08;通常是浏览器&#xff09;输入 URL&#xff08;例如 https://www.example.com&#xff09;时&#xff0c;它首先需要解析出对应的 IP 地址。这个过程涉及 DNS&#xff08;域…...

go游戏后端开发25:红中麻将规则介绍

一、游戏基础规则介绍 在开发红中麻将游戏之前&#xff0c;我们需要先了解其基础规则。红中麻将的牌面由 a、b、c、d 四种花色组成&#xff0c;其中 a、b、c 分别代表万、条、筒&#xff0c;每种花色都有 1 - 9 的九种牌&#xff0c;每种牌各有四张&#xff0c;总计 36 张 4 …...

【YOLO系列(V5-V12)通用数据集-电梯内电动车检测数据集】

YOLO格式的电梯内电动车检测数据集&#xff0c;适用于YOLOv5-v11所有版本&#xff0c;可以用于本科毕设、发paper、做课设等等&#xff0c;有需要的在这里获取&#xff1a; 电梯内电动车检测数据集 数据集专栏地址&#xff1a;https://blog.csdn.net/qq_41304809/category_1290…...

Python每日一题(15)

Python每日一题2025.4.4 一、题目题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 二、分析三、源代码四、deepseek 一、题目 题目描述 您需要写一种数据结构&#xff0c;来维护一些数&#xff08;都是绝对值 1 0 9 10^9 109 以内的数&#xff09;的集合&#xff0c…...

算法题(114):矩阵距离

审题&#xff1a; 本题需要我们找出所有0距离最近的1的曼哈顿距离 思路&#xff1a; 方法一&#xff1a;多源bfs 分析曼哈顿距离&#xff1a; 求法1&#xff1a;公式法&#xff0c;带入题目公式&#xff0c;利用|x1-x2||y1-y2|求出 求法2&#xff1a;曼哈顿距离就是最短距离 本…...

0102-web架构网站搭建-基础入门-网络安全

文章目录 1. 常规2 站库分离3 前后端分离4 集成环境5 docker6 分配站结语 1. 常规 结构&#xff1a;源码数据都在同服务器 影响&#xff1a;无&#xff0c;常规安全测试手法 2 站库分离 结构&#xff1a;源码和数据库不在同服务器 存储&#xff1a;其他服务器上数据库或者…...

Linux系统编程:进程管理、内存对比与树莓派应用

一、认识进程和线程&#xff0c;在Linux系统下查看系统中各进程的编号pid并终止一个进程pid 1.进程和线程 ​​进程​​&#xff1a;操作系统分配资源&#xff08;如内存、CPU时间片&#xff09;的基本单位。每个进程有独立的内存空间&#xff0c;进程间通信需要较复杂的机制…...

ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题原因二、设置碰撞2.读入数据 总结 前言 ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞 一、问题原因 在UE5中&#xff0c;角色和敌人没有碰撞可能是由多种原因导致的&#xff0c;以下是一些可能的原因及解决方法&#xff1a…...

基于Flask的MBA考生成绩查询系统设计与实现

基于Flask的MBA考生成绩查询系统设计与实现 序言 2024年吉林大学MBA在职研究生考试成绩公布后&#xff0c;考生收到的成绩单为PDF格式文档。为方便考生快速查询个人成绩及排名信息&#xff0c;笔者基于Python Flask框架开发了本查询系统。该系统支持关键词模糊查询、序号范围…...

GATT(Generic Attribute Profile)是蓝牙低功耗(Bluetooth Low Energy,简称BLE)协议栈中的一个核心协议

蓝牙的 GATT&#xff08;Generic Attribute Profile&#xff09; 是蓝牙低功耗&#xff08;Bluetooth Low Energy&#xff0c;简称BLE&#xff09;协议栈中的一个核心协议&#xff0c;用于定义设备如何通过蓝牙进行数据传输和交互。GATT 是基于 ATT&#xff08;Attribute Proto…...

DHCP之报文格式

字段说明&#xff1a; op (op code): 表示报文的类型&#xff0c;取值为 1 或 2&#xff0c;含义如下 1:客户端请求报 2:服务器响应报文 Secs (seconds):由客户端填充&#xff0c;表示从客户端开始获得 IP 地址或 IP 地址续借后所使用了的秒数&#xff0c;缺省值为 3600s。 F…...

React 文件上传新玩法:Aliyun OSS 加持的智能上传组件

文件上传是前端开发中的“老朋友”&#xff0c;但如何让它既简单又强大&#xff0c;还能无缝对接云端存储&#xff1f;今天&#xff0c;我要带你认识一个超酷的 React 组件 AliUploader&#xff0c;它不仅支持拖拽上传、批量编辑和文件排序&#xff0c;还直接把文件传到 Aliyun…...

群体智能优化算法-变色龙优化算法(Chameleon Swarm Algorithm, CSA,含Matlab源代码)

摘要 变色龙优化算法&#xff08;Chameleon Swarm Algorithm, CSA&#xff09;是一种受变色龙行为启发的群体智能优化算法。该算法模拟了变色龙在自然界中通过变换颜色来适应环境的能力&#xff0c;以此为基础&#xff0c;设计了一个适应性强、搜索能力广泛的优化算法。CSA 通…...

使用 React 和 Konva 实现一个在线画板组件

文章目录 一、前言二、Konva.js 介绍三、创建 React 画板项目3.1 安装依赖3.2 创建 CanvasBoard 组件 四、增加画布控制功能4.1 清空画布4.2 撤销 & 重做功能 五、增加颜色和画笔大小选择5.1 选择颜色5.2 选择画笔大小 六、最终效果七、总结 一、前言 在线画板是许多应用&…...

GitHub高级筛选小白使用手册

GitHub高级筛选小白使用手册 GitHub 提供了强大的搜索功能&#xff0c;允许用户通过高级筛选器来精确查找仓库、Issues、Pull Requests、代码等。下面是一些常用的高级筛选用法&#xff0c;帮助你更高效地使用 GitHub 搜索功能。 目录 搜索仓库搜索Issues搜索Pull Requests搜…...

通过第k个最大元素深入浅出快排和堆排序

快排和堆排序在确定k个元素有着得天独厚的优势&#xff0c;原因是无论快排还是堆排序在每一轮排序中均可以确定一个元素 快排&#xff1a;每一轮排序均可以确定一个元素位置堆排序&#xff1a;每一轮排序都可以确定一个最小值或最大值 他们的时间复杂度都是O(nlogk)&#xff…...

NVR接入录像回放平台EasyCVR视频系统守护舌尖上的安全,打造“明厨亮灶”云监管平台

一、方案背景 近年来&#xff0c;餐饮行业食品安全和卫生等问题频发&#xff0c;比如后厨卫生脏乱差等&#xff0c;持续引发关注&#xff0c;这些事情导致连锁反应&#xff0c;使其收益遭受损失。同时&#xff0c;给消费者造成了心理和生理上的伤害。 加强餐饮行业的监管成为…...

Airflow+Spark/Flink vs. Kettle

在迁移亿级&#xff08;单表超过1.3亿&#xff09;结构化数据&#xff08;达梦→星环&#xff09;的场景下&#xff0c;Airflow&#xff08;结合分布式计算框架&#xff09;的综合效果优于Kettle&#xff0c;以下是详细对比与方案建议&#xff1a; 一、核心对比&#xff1a;Air…...

Cribl 导入文件来检查pipeline 的设定规则(eval 等)

Cribl 导入文件来检查pipeline 的设定规则(eval 等) 从这个页面先下载,或者copy 内容来创建pipeline: Reducing Windows XML Events | Cribl Docs...

[C++面试] new、delete相关面试点

一、入门 1、说说new与malloc的基本用途 int* p1 (int*)malloc(sizeof(int)); // C风格 int* p2 new int(10); // C风格&#xff0c;初始化为10 new 是 C 中的运算符&#xff0c;用于在堆上动态分配内存并调用对象的构造函数&#xff0c;会自动计算所需内存…...

一周学会Pandas2 Python数据处理与分析-Jupyter Notebook安装

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Jupyter (Project Jupyter | Home&#xff09;项目是一个非营利性开源项目&#xff0c;于2014年由IPython项目中诞生…...

第30周Java分布式入门 消息队列 RabbitMQ

RabbitMQ章节介绍 一、RabbitMQ概述 RabbitMQ学习内容: 本章节将学习RabbitMQ的概念、安装启动、管理后台、代码实操、交换机工作模式以及Spring Boot整合RabbitMQ。消息队列定义: 消息队列是一种用于在分布式系统中传递消息的机制。消息队列特性: 消息队列具有异步、解耦、削…...

北斗导航 | THE GNSS AMBIGUITY RATIO-TEST REVISITED: A BETTER WAY OF USING IT【论文要点】

THE GNSS AMBIGUITY RATIO-TEST REVISITED: A BETTER WAY OF USING IT 总结该论文的核心贡献及关键方法如下:论文核心内容概述 传统比率测试的局限性 传统比率测试通过比较最优与次优模糊度解的残差平方和比值(即 R = q (...

MySQL 面试知识点详解(索引、存储引擎、事务与隔离级别、MVCC、锁机制、优化)

一、索引基础概念 1 索引是什么&#xff1f; 定义&#xff1a;索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;类似书籍的目录。核心作用&#xff1a;减少磁盘I/O次数&#xff0c;提升查询速度&#xff08;以空间换时间&#xff09;。 2 索引的优缺点 优点缺点加速…...

Linux / Windows 下 Mamba / Vim / Vmamba 安装教程及安装包索引

目录 背景0. 前期环境查询/需求分析1. Linux 平台1.1 Mamba1.2 Vim1.3 Vmamba 2. Windows 平台2.1 Mamba2.1.1 Mamba 12.1.2 Mamba 2- 治标不治本- 终极版- 高算力版 2.2 Vim- 治标不治本- 终极版- 高算力版 2.3 Vmamba- 治标不治本- 终极版- 高算力版 3. Linux / Windows 双平…...

deepseek v3-0324 Markdown 编辑器 HTML

Markdown 编辑器 HTML 以下是一个美观的 Markdown 编辑器 HTML 页面&#xff0c;支持多种主题切换和实时预览功能&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&q…...

视频设备轨迹回放平台EasyCVR如何搭建公共娱乐场所远程视频监控系统

一、背景介绍 由于KTV、酒吧、足疗店等服务场所人员流动频繁、环境复杂&#xff0c;一直是治安管理的重点区域。为有效打击 “黄赌毒”、打架斗殴、寻衅滋事等违法犯罪的活动&#xff0c;打造安全有序的娱乐消费环境&#xff0c;我国相关部门将加大对这类场所的清查与管控力度…...

网络安全基础知识总结

什么是网络安全 采取必要措施&#xff0c;来防范对网络的攻击&#xff0c;侵入&#xff0c;干扰&#xff0c;破坏和非法使用&#xff0c;以及防范一些意外事故&#xff0c;使得网络处于稳定可靠运行的状态&#xff0c;保障网络数据的完整性、保密性、可用性的能力(CIA)。 举例…...

Python设计模式:克隆模式

1. 什么是克隆模式 克隆模式的核心思想是通过复制一个已有的对象&#xff08;原型&#xff09;来创建一个新的对象&#xff08;克隆&#xff09;。这种方式可以避免重复的初始化过程&#xff0c;从而提高效率。克隆模式通常涉及以下几个方面&#xff1a; 原型对象&#xff1a…...

【工具】在 Visual Studio 中使用 Dotfuscator 对“C# 类库(DLL)或应用程序(EXE)”进行混淆

在 Visual Studio 中使用 Dotfuscator 进行混淆 Dotfuscator 是 Visual Studio 自带的混淆工具&#xff08;Dotfuscator Community Edition&#xff0c;简称 CE&#xff09;。它可以混淆 C# 类库&#xff08;DLL&#xff09;或应用程序&#xff08;EXE&#xff09;&#xff0c…...