计算机网络-HTTP与HTTPS

news2025/5/21 6:26:52

文章目录

      • 计算机网络
        • 网络模型
          • 网络OSI
          • TCP/IP
        • 应用层
          • 常用协议
          • HTTP报文
          • HTTP状态码
          • HTTP请求类型
          • HTTP握手过程
          • HTTP连接
          • HTTP断点续传
          • HTTPS
          • HTTPS握手过程

计算机网络

网络模型

为了解决多种设备能够通过网络相互通信,解决网络互联兼容性问题。

网络模型是计算机网络中用于理解和设计网络通信的分层架构

主要分OSI模型和TCP/IP模型

在这里插入图片描述

网络OSI
  • 物理层

    传输原始比特流,定义物理介质(电缆、光纤等)的电气、机械特性。

    数据单元:比特(Bit)

  • 数据链路层

    数据封帧,在直接相连的节点间可靠传输数据帧,MAC地址寻址,错误检测。

    数据单元:帧

  • 网络层

    负责数据的路由转发分片,IP地址寻址。

    数据单元:数据包

  • 传输层

    端到端通信,确保可靠传输(TCP)或快速传输(UDP)。

    数据单元:TCP,UDP

  • 会话层

    建立、管理和终止会话,同步数据交换。

  • 表示层

    数据格式转换、加密/解密(如SSL/TLS)、压缩(如JPEG、MPEG)。

  • 应用层

    提供用户统一的接口,支持应用程序通信。

TCP/IP
  • 网络接口层

    处理物理连接和本地网络数据传输。

  • 网络层

    IP寻址、路由。

  • 传输层

    处理主机到主机的通信(TCP、UDP)。

  • 应用层

    支持 HTTP、SMTP 等最终用户进程。

应用层
  • 提供应用程序与网络之间的交互接口(如浏览器、邮件客户端)。
  • 用户通过应用层协议访问网络服务(如访问网页、发送邮件)。
常用协议

HTTP,HTTPS,CDN,DNS等。

默认端口:

HTTP:80

HTTPS: 443

HTTP报文

无论是请求报文还是回应报文,均有3部分组成

|-----------------------|
| 起始行 | → 请求方法/状态码等
|-----------------------|
| 头部字段 | → 元数据(键值对)
|-----------------------|
| 空行 | → 分隔头部和正文
|-----------------------|
| 消息体 | → 实际传输的数据(可选)
|-----------------------|

  • 请求报文

    [起始行]:方法/请求URL/HTTP版本
    [头部字段]:包含关于请求的附加信息,如Host、User-Agent、Content-Type等。
    [空行]
    [消息体]:用于传递数据(如 POST 请求的表单或JSON数据)。

    POST /login HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 27
    
    username=admin&password=123
    
  • 响应报文

    [起始行] :包含HTTP版本/状态码/状态信息。
    [头部字段] :包含关于响应的附加信息,响应数据类型,数据类型,cookie等
    [空行]
    [消息体] :包含响应的数据,通常是服务器返回的HTML、JSON等内容

    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 137
    Date: Wed, 21 Oct 2023 07:28:00 GMT
    
    <html>
      <body>
        <h1>Welcome to Example.com</h1>
      </body>
    </html>
    
HTTP状态码
分类描述常见状态码
1xx信息类(请求已被接收,继续处理)100, 101
2xx成功类(请求被成功处理)200, 201, 204
3xx重定向类(需进一步操作以完成请求)301, 302, 304
4xx客户端错误类(请求有误,服务器无法处理)400, 401, 403, 404
5xx服务器错误类(服务器处理请求失败)500, 502, 503

其中常用的状态码:

  • 200:请求被成功处理
  • 301:资源已永久迁移到新URL(网站更换域名,旧链接跳转到新地址)
  • 302:资源临时从其他URL返回,客户端后续应继续请求原地址(未登录用户访问受限页面,临时跳转到登录页)
  • 404:请求的资源不存在
  • 500:服务器内部错误,无法完成请求(后端代码抛出未捕获的异常,如数据库连接失败)
HTTP请求类型
  • GET

    • 用途:获取资源(从服务器读取数据)。

    • 特点:

      • 安全且幂等。(幂等:多次重复请求与单次请求效果相同)
      • 参数通过 URL 传递(如 /users?id=1)。
      • 通常无请求体(但技术上允许)。
    • 示例

      GET /api/users/1 HTTP/1.1
      Host: example.com
      
  • POST

    • 用途:提交资源(向服务器发送数据,可能创建新资源)。

    • 特点:

      • 非安全、非幂等(非幂等:多次请求可能产生不同结果)。
      • 数据通过请求体传输(如 JSON、表单)。
      • 常用于创建新资源或触发复杂操作。
    • 示例

      POST /api/users HTTP/1.1
      Content-Type: application/json
      
      {"name": "Alice", "age": 25}
      
  • PUT

    • 用途:全量更新资源(替换目标资源的全部内容)。

    • 特点:

      • 幂等。
      • 需指定完整资源数据,用于覆盖已有内容。
      • 若资源不存在,可能创建新资源(取决于实现)。
    • 示例

      PUT /api/users/1 HTTP/1.1
      Content-Type: application/json
      
      {"name": "Bob", "age": 30}
      
  • DELETE

    • 用途:删除资源。

    • 特点:

      • 幂等。
      • 通常无请求体。
    • 示例

      DELETE /api/users/1 HTTP/1.1
      Host: example.com
      
  • HEAD

    • 用途:获取资源的元数据(与 GET 类似,但无响应体)。

    • 特点:

      • 安全且幂等。
      • 常用于检查资源是否存在或验证缓存。
    • 示例:

      HEAD /api/users/1 HTTP/1.1
      Host: example.com
      
HTTP握手过程

HTTP 本身无握手过程,其通信依赖 TCP 三次握手建立连接。

在这里插入图片描述

整个过程如下:

1.TCP三次握手

客户端                        服务器
  |                              |
  | ---- SYN(seq=x) ----------> |
  |                              |
  | <--- SYN-ACK(seq=y, ack=x+1)-|
  |                              |
  | ---- ACK(ack=y+1) --------->|
  |                              |
  • 步骤解释:

    1. SYN:客户端发送同步报文,携带初始序列号 seq=x

    2. SYN-ACK:服务器回应同步确认,携带自己的序列号 seq=y 和对客户端的确认号 ack=x+1

    3. ACK:客户端确认服务器的响应,连接建立。

2.HTTP请求/响应

TCP 连接建立后,客户端直接发送 HTTP 请求:

GET /index.html HTTP/1.1
Host: example.com

服务器返回 HTTP 响应:

HTTP/1.1 200 OK
Content-Type: text/html

<html>...</html>

3.连接关闭

通信完成后,通过四次挥手关闭连接:

客户端                        服务器
  |                              |
  | ---- FIN -------------------> |
  | <---- ACK ------------------- |
  |                              |
  | <---- FIN ------------------- |
  | ---- ACK -------------------> |
  |                              |
HTTP连接

HTTP是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应。

  • 短连接

在这里插入图片描述

这样的连接就是短连接,一次连接只能请求一次资源。

  • 长连接

    HTTP 的 Keep-Alive 就是实现了这个功能,可以使用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态,避免了连接建立和释放的开销,这个方法称为 HTTP 长连接

在这里插入图片描述

HTTP断点续传

断点续传允许客户端只请求资源的一部分,而不是整个文件。这对于大文件下载非常有用,特别是当下载中断时,可以从中断的地方继续,而不必重新开始

举个例子,大文件下载中断后恢复的流程如下:

假设文件总大小为2GB(2,147,483,648 字节),已经下载了500MB(即 524,288,000 字节)后中断了,剩余1.5GB未下载。

  1. 客户端首次下载(0~500MB)

    客户端未指定 Range 头部,尝试完整下载:

    GET /large-video.mp4 HTTP/1.1
    Host: example.com
    
  2. 服务器响应

    服务器返回完整文件(若支持断点续传,会包含 Accept-Ranges: bytes):

    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Content-Length: 2147483648
    Content-Type: video/mp4
    
    [视频文件的前 524,288,000 字节...(下载中途网络断开)]
    
  3. 客户端发送 HEAD 请求

    确认服务器是否支持范围请求:

    HEAD /large-video.mp4 HTTP/1.1
    Host: example.com
    
  4. 服务器响应:

    返回 Accept-Ranges: bytes 表示支持:

    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Content-Length: 2147483648
    Content-Type: video/mp4
    Last-Modified: Wed, 21 Oct 2023 00:00:00 GMT
    ETag: "abc123xyz"
    
  5. 客户端发起续传请求:

    通过 Range 头部指定从已下载位置继续请求:

    GET /large-video.mp4 HTTP/1.1
    Host: example.com
    Range: bytes=524288000-      # 请求 500MB 之后的所有数据
    If-Range: "abc123xyz"        # 使用 ETag 校验文件未修改
    
    • Range: bytes=524288000-:表示请求从第 500MB 到文件末尾。

    • If-Range:若文件未修改(ETag 匹配),服务器返回剩余部分;若已修改,返回完整文件。

  6. 服务器处理请求:

    • 文件未修改:返回 206 Partial Content 和剩余数据:

      HTTP/1.1 206 Partial Content
      Content-Range: bytes 524288000-2147483647/2147483648
      Content-Length: 1623195648  # 剩余 1.5GB 的长度(2147483648 - 524288000=1623195648)
      Content-Type: video/mp4
      ETag: "abc123xyz"
      
      [视频文件的 500MB ~ 2GB 数据]
      
    • 文件已修改:返回 200 OK 和完整文件(需重新下载)。

  7. 客户端合并文件:

    客户端将已下载的 500MB 数据与续传的 1.5GB 数据按字节顺序拼接,得到完整文件。

HTTPS

HTTP和 HTTPS(HTTP Secure)是 Web 通信的核心协议,HTTPS 本质是 HTTP 的安全版本,通过加密和身份验证保障数据传输的安全性。

HTTP为什么不安全?

核心原因在于其明文传输、缺乏身份验证和完整性保护

  • 明文传输

    HTTP协议在传输过程中不加密数据,所有内容(如密码、银行卡号、聊天记录)均以明文形式在网络中传输。

  • 无身份验证

    HTTP协议不验证服务器身份,用户无法确认自己连接的是真实服务器还是攻击者的伪造站点。

  • 数据无完整性保护

    HTTP传输的数据无完整性校验机制,攻击者可随意修改传输内容。

所以就需要用到HTTPS进行安全管理:

那么HTTPS是如何保证安全性的呢?

  • 在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTPS握手过程

HTTPS 在 TCP 连接基础上增加了 TLS/SSL 握手,用于协商加密参数、验证身份并生成会话密钥。

1.TCP 三次握手

与 HTTP 相同,首先建立 TCP 连接。

2.TLS握手

客户端                                    服务器
  |                                          |
  | ---- Client Hello(支持的加密套件等)-----> |
  |                                          |
  | <---- Server Hello(选定加密套件)--------- |
  | <---- Certificate(服务器证书)----------- |
  | <---- Server Key Exchange(可选)--------- |
  | <---- Server Hello Done ---------------- |
  |                                          |
  | ---- Client Key Exchange(预主密钥)------> |
  | ---- Change Cipher Spec(准备加密)-------> |
  | ---- Finished(加密验证)----------------> |
  |                                          |
  | <---- Change Cipher Spec(准备加密)------- |
  | <---- Finished(加密验证)---------------- |
  |                                          |
  • 第一次握手

    客户端向服务器发起加密通信请求,也就是 ClientHello 请求。

    • TLS 版本:支持的 TLS 版本。
    • 随机数1:32 字节的随机数,用于生成会话密钥。
    • 加密套件列表:支持的加密算法组合
  • 第二次握手

    服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。

    • TLS 版本:双方协商后的版本。
    • 随机数2:32 字节的随机数,也用于生成会话密钥。
    • 选定的加密套件:从客户端列表中选择的加密套件
    • 证书链:服务器公钥证书(由 CA 签发)
  • 第三次握手

    Client Key Exchange。

    客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。

    如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

    • 随机数3:该随机数会被服务器公钥加密。
    • 加密通信算法改变通知,通知服务器后续消息将加密。
    • 客户端握手结束通知。

    密钥生成过程:

    1. 客户端使用3个随机数生成 主密钥(Master Secret)
    2. 主密钥进一步生成 会话密钥(Session Key)
  • 第四次握手

    • 服务器 → 客户端
      服务器确认加密参数:
      • Change Cipher Spec:通知客户端后续消息加密。
      • Finished:发送加密的验证消息,确认握手完整性。

3.加密的HTTP通信

握手完成后,所有 HTTP 数据通过会话密钥加密传输:

客户端                                    服务器
  |                                          |
  | ---- Encrypted HTTP Request -----------> |
  | <---- Encrypted HTTP Response ---------- |
  |                                          |

4.连接关闭

先关闭 TLS 连接,再关闭 TCP 连接。

在这里插入图片描述
不断学习中,结合小林Coding整理了些笔记,感谢大家的观看>W<

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

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

相关文章

信号波形发生器电路Multisim仿真

一、电路 二、示波器 三、示波器波形 四、所遇到的问题 1、只是把电路仿真出来了&#xff0c;具体原理没有理解。 解&#xff1a; 第一个波形是正弦波&#xff0c;是由电阻和电容的振荡电路产生的。 第二个波形是方波&#xff0c;产生的正弦波通过电压比较器输出一个方波。…

Spring AI 介绍

Python一直是AI领域的主要语言, 主要原因是因其语法简洁易学、拥有丰富且强大的AI专用库及框架、具备跨平台兼容性且社区生态活跃,能高效支撑AI算法开发、数据处理及模型部署。 Spring开发了AI开发的框架Spring AI,对于Java的开发者来说,也可以快速入手AI相关的开发了。 S…

onlyoffice 源码 调试说明 -ARM和x86双模式安装支持

很多用户在调试onlyoffice源码最大的问题是如何搭建环境,这个难度很高,下面提供一键安装的方式,让普通用户也能快速调试源码。 OnlyOffice Document Server 基于源码运行的容器调试模式&#xff0c;凭借 Docker 容器化技术的核心优势&#xff0c;为开发者提供了跨平台、高兼容性…

EXCEL在一列数据前统一添加负号

1.全选数据列 2.右键&#xff0c;设置单元格格式。输入-0&#xff0c;要保留三位小数就输入-0.000. 3.添加完成效果。

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义&#xff0c;每个字符由 16bit 数据表示。对于用户界面&#xff0c;strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化&#xff0c;每个 string 通过一个唯一标识符来识别&#xff0c;而每一个标识…

高等数学基础(牛顿/莱布尼茨公式)

牛顿/莱布尼茨公式主要是为定积分的计算提供了高效的方法, 其主要含义在于求积分的函数( f ( x ) f(x) f(x))连续时候总是存在一条积分面积的函数( F ( x ) F(x) F(x))与之对应, 牛顿莱布尼茨公式吧微分和积分联系了起来, 提供了这种高效计算积分面积的方法 参考视频理解: http…

2025年渗透测试面试题总结-华顺信安[实习]安全服务工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 华顺信安[实习]安全服务工程师 1. 自我介绍 2. 红蓝队经验 3. Shiro漏洞知识体系 4. APP渗透测试方法…

掌握Git:版本控制与高效协作指南

一、初始Git 提出问题&#xff1a;无论是在工作还是学习&#xff0c;我们在编写各种文档的时候&#xff0c;更改失误&#xff0c;失误后恢复到原来版本&#xff0c;不得不复制出一个副本。 每个版本由各自的内容&#xff0c;但最终只有一个报告需要被我们使用。 但在此之前的…

VsCode和AI的前端使用体验:分别使用了Copilot、通义灵码、iflyCode和Trae

1、前言 大杂烩~每次开发一行代码&#xff0c;各个AI争先恐后抢着提供帮助 备注&#xff1a;四款插件都需要先去官网注册账号&#xff0c;安装好之后有个账号验证。 2、插件详解 2.1、AI分析的答案 GitHub Copilot 定位&#xff1a;老牌 AI 代码补全工具&#xff0c;深度集成…

交叉熵损失函数,KL散度, Focal loss

目录 交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09; 二分类交叉熵 多分类交叉熵 KL散度&#xff08;Kullback-Leibler Divergence) 交叉熵损失函数和KL散度总结 Focal loss Focal loss 和 交叉熵损失函数 的区别 交叉熵损失函数&#xff08;Cross-Entropy…

【Part 3 Unity VR眼镜端播放器开发与优化】第一节|基于Unity的360°全景视频播放实现方案

《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化&#xff0c;以及高分辨率视频性能优化等实战技巧。 &#x1f4dd; 希望通过这个专栏&am…

IDEA连接github(上传项目)

【前提&#xff1a;菜鸟学习的记录过程&#xff0c;如果有不足之处&#xff0c;还请各位大佬大神们指教&#xff08;感谢&#xff09;】 1.先配置好git环境。 没配置的小伙伴可以看上一篇文章教程。 安装git&#xff0c;2.49.0版本-CSDN博客 2.在idea设置git 打开IDEA设置-…

重构研发效能:项目管理引领软件工厂迈向智能化

1.项目管理智能化&#xff0c;激活软件工厂新引擎 在高速发展的软件开发时代&#xff0c;企业如何高效管理多个项目、协调团队合作、优化资源配置&#xff0c;已成为推动技术进步的关键。尤其是在多任务、多项目并行的复杂环境下&#xff0c;智能项目组合管理工具正成为软件工…

Vue3 中使用 provide/inject 实现跨层级组件传值失败的原因及解决方案

1、基础用法 父组件&#xff1a; <script setup> import { ref, provide } from vue; import ChildComponent from ./ChildComponent.vue; const parentData ref(初始数据); // 提供数据 provide(parentData, parentData); </script>子组件&#xff1a; <sc…

小白的进阶之路系列之二----人工智能从初步到精通pytorch中分类神经网络问题详解

什么是分类问题? 分类问题涉及到预测某物是一种还是另一种。 例如,你可能想要: 问题类型具体内容例子二元分类目标可以是两个选项之一,例如yes或no根据健康参数预测某人是否患有心脏病。多类分类目标可以是两个以上选项之一判断一张照片是食物、人还是狗。多标签分类目标…

Vue3——Pinia

目录 什么是 Pinia&#xff1f; 为什么选择 Pinia&#xff1f; 基本使用 安装pinia 配置pinia 定义store 使用 持久化插件 什么是 Pinia&#xff1f; Pinia 是一个轻量级的状态管理库&#xff0c;专为 Vue 3 设计。它提供了类似 Vuex 的功能&#xff0c;但 API 更加简…

02 基本介绍及Pod基础排错

01 yaml文件里的字段错误 # 多打了一个i导致的报错 [rootmaster01 yaml]# cat 01-pod.yaml apiVersion: v1 kind: Pod metadata:name: likexy spec:contaiiners:- name: aaaimage: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 [rootmaster01 yaml]# kubectl …

⼆叉搜索树详解

1. ⼆叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树: • 若它的左⼦树不为空&#xff0c;则左⼦树上所有结点的值都⼩于等于根结点的值 • 若它的右⼦树不为空&#xff0c;则右⼦树上所有结点的值都⼤于等于根结…

如何使用通义灵码提高前端开发效率

工欲善其事&#xff0c;必先利其器。对于前端开发而言&#xff0c;使用VSCode已经能够极大地提高前端的开发效率了。但有了AI加持后&#xff0c;前端开发的效率又更上一层楼了&#xff01; 本文采用的AI是通义灵码插件提供的通义千问大模型&#xff0c;是目前AI性能榜第一梯队…

Android Studio Kotlin 中的方法添加灰色参数提示

在使用 Android Studio 时&#xff0c; 我发现使用 Java 编写方法后在调用方法时&#xff0c; 会自动显示灰色的参数。 但在 Kotlin 中没有显示&#xff0c; 于是找了各种方法最后找到了设置&#xff0c; 并且以本文章记录下来。 博主博客 https://blog.uso6.comhttps://blog.…