HTTP 与 HTTPS 的工作原理及其区别

目录

[1. HTTP (超文本传输协议)](#1. HTTP (超文本传输协议))

[2. HTTPS (基于 TLS/SSL 的 HTTP)](#2. HTTPS (基于 TLS/SSL 的 HTTP))

[3. HTTP 与 HTTPS 核心区别总结](#3. HTTP 与 HTTPS 核心区别总结)

图解关键点



1. HTTP (超文本传输协议)

  • 定义: 一种用于在 Web 浏览器和 Web 服务器之间传输超文本(如 HTML 页面)和其他资源的应用层协议

  • 工作原理 (文字示意图):

    复制代码
    [ 浏览器 ]  ------------ 明文 HTTP 请求 (GET /index.html) ------------> [ Web 服务器 ]
    [ 浏览器 ]  <------------ 明文 HTTP 响应 (HTML 内容) ----------------- [ Web 服务器 ]
    • 步骤:
      1. 建立 TCP 连接: 浏览器通过目标服务器的 IP 地址和端口号(默认 80)建立一个到 Web 服务器的 TCP 连接。这是数据传输的基础通道。
      2. 发送 HTTP 请求: 浏览器通过这个 TCP 连接,以明文形式发送一个 HTTP 请求报文给服务器。请求中包含方法(如 GETPOST)、请求的资源路径(如 /index.html)、HTTP 版本、请求头(包含浏览器信息、接受的响应类型等)。
      3. 服务器处理请求: 服务器收到请求后,解析请求内容,根据请求的资源路径找到对应的文件或执行相应的处理逻辑。
      4. 发送 HTTP 响应: 服务器通过同一个 TCP 连接,以明文形式发送一个 HTTP 响应报文回浏览器。响应中包含状态码(如 200 OK404 Not Found)、响应头(包含服务器信息、内容类型、长度等)、响应体(如 HTML 文件内容)。
      5. 关闭连接 (或保持): 根据 HTTP 版本和头信息,TCP 连接可能被关闭(HTTP/1.0 默认),也可能保持打开用于后续请求(HTTP/1.1 默认的持久连接)。
    • 关键特点:
      • 明文传输: 请求和响应的内容都是未加密的,任何在传输路径上的中间节点(如路由器、防火墙、ISP)都可以看到传输的数据(密码、信用卡号、个人信息等)。
      • 无身份验证: 无法验证通信对方的真实身份。你访问的 www.bank.com 可能是一个假冒的服务器。
      • 无数据完整性保护: 传输的数据可能在途中被篡改,而通信双方无法察觉。

2. HTTPS (基于 TLS/SSL 的 HTTP)

  • 定义: HTTP 的安全版本。它在 HTTP 和 TCP 层之间增加了一个 TLS/SSL 协议层(现在通常指 TLS)。

  • 核心目标:

    • 加密 (Confidentiality): 传输的数据被加密,防止被窃听。
    • 身份认证 (Authentication): 通过数字证书验证服务器的身份(有时也验证客户端)。
    • 数据完整性 (Integrity): 确保数据在传输过程中未被篡改。
  • 工作原理 (文字示意图):

    复制代码
    [ 浏览器 ]  ------------ TCP 连接 (端口 443) ------------> [ Web 服务器 ]
    [ 浏览器 ]  <==== TLS/SSL 握手 (协商密钥、验证证书) ====> [ Web 服务器 ]
    [ 浏览器 ]  ------------ 加密的 HTTP 请求 --------------> [ Web 服务器 ]
    [ 浏览器 ]  <------------- 加密的 HTTP 响应 ------------ [ Web 服务器 ]
    • 步骤:
      1. 建立 TCP 连接: 浏览器连接到服务器的 443 端口(HTTPS 默认端口),建立 TCP 连接。
      2. TLS/SSL 握手: 这是 HTTPS 安全性的核心。在握手阶段:
        • 协商协议版本和加密套件: 客户端和服务器互相告知支持的 TLS 版本和可用的加密算法组合(包括密钥交换算法、对称加密算法、散列算法)。
        • 服务器身份验证 (核心): 服务器将其 数字证书 发送给客户端。证书包含服务器的公钥、域名、有效期、颁发机构 (CA) 等信息。
        • 客户端验证证书: 浏览器使用其内置或操作系统信任的 根证书颁发机构 (Root CA) 的公钥,验证服务器证书的签名链是否可信。同时检查证书是否过期、域名是否匹配等。
        • 密钥交换: 验证通过后,客户端生成一个 预主密钥 ,用服务器的公钥加密后发送给服务器(或使用其他密钥交换算法如 ECDHE)。服务器用自己的私钥解密得到预主密钥。
        • 生成会话密钥: 客户端和服务器利用预主密钥、交换过程中的随机数等,独立计算出相同的 对称会话密钥。这个密钥将用于后续通信的加密和解密。
        • 握手完成: 双方交换加密后的握手完成消息,确认握手成功,后续通信将使用会话密钥进行加密。
      3. 发送加密的 HTTP 请求: 浏览器通过已建立的 TLS 通道(在 TCP 之上),将 HTTP 请求报文用会话密钥加密后发送给服务器。
      4. 服务器处理请求: 服务器使用相同的会话密钥解密请求,处理请求内容。
      5. 发送加密的 HTTP 响应: 服务器将 HTTP 响应报文用会话密钥加密后,通过 TLS 通道发送回浏览器。
      6. 浏览器解密响应: 浏览器使用会话密钥解密响应,渲染页面。
      7. 关闭连接: 通信结束后,关闭 TCP 连接。会话密钥通常只用于当前连接(会话)。
    • 关键特点:
      • 加密传输: 所有 HTTP 数据在 TLS 层被加密,中间节点无法看到明文内容。
      • 服务器身份认证: 通过数字证书机制,浏览器可以确认它连接的是拥有该域名合法证书的真实服务器,防止中间人攻击。
      • 数据完整性保护: TLS 使用消息认证码 (MAC) 等技术,确保数据在传输过程中未被篡改。
      • 性能开销: 建立连接时的握手过程需要额外的计算和通信开销(证书验证、密钥协商),以及后续通信的加密/解密操作。现代硬件和协议优化(如 TLS 1.3)已显著降低了这种开销。

3. HTTP 与 HTTPS 核心区别总结

特性 HTTP HTTPS
协议 应用层协议 HTTP + TLS/SSL (应用层 + 安全层)
默认端口 80 443
传输方式 明文 加密
安全性 无加密、无认证、无完整性保护 加密传输、服务器认证、数据完整性保护
性能开销 较高 (握手阶段)
URL前缀 http:// https://
浏览器标识 无特殊标识 地址栏通常显示锁图标

图解关键点

  • HTTP 风险点: 在浏览器到服务器的路径上,明文数据暴露给所有中间节点。
  • HTTPS 安全点:
    • 证书信任链: 浏览器信任的 Root CA -> 签发服务器证书的 Intermediate CA -> 服务器证书。浏览器验证证书签名链。
    • 加密通道: TLS 握手协商出的会话密钥加密了所有后续的 HTTP 通信。

希望以上解释和示意图能帮助您清晰理解 HTTP 和 HTTPS 的工作原理与区别!

相关推荐
水上冰石2 小时前
harbor使用https之证书生成
服务器·数据库·https
全栈工程师修炼指南4 小时前
Nginx | HTTPS 加密传输:客户端与Nginx服务端 SSL 双向认证实践
运维·网络·nginx·https·ssl
教练、我想打篮球4 小时前
120 同样的 url, header, 参数, 使用 OkHttp 能够成功获取数据, 使用 RestTemplate 报错
http·okhttp·resttemplate·accept
zfj3214 小时前
websocket为什么需要在tcp连接成功后先发送一个标准的http请求,然后在当前tcp连接上升级协议成websocket
websocket·tcp/ip·http
杀手不太冷!4 小时前
Jenkins的安装与使用;git clone url的时候,url为http和ssh时候的区别
git·http·jenkins
2501_915106325 小时前
用 HBuilder 上架 iOS 应用时如何管理Bundle ID、证书与描述文件
android·ios·小程序·https·uni-app·iphone·webview
2501_915918415 小时前
iOS App 性能测试中常被忽略的运行期问题
android·ios·小程序·https·uni-app·iphone·webview
irisart6 小时前
第二章【NGINX 开源功能】—— HTTP 服务器(下)
nginx·http·开源
jcsx1 天前
如何将django项目发布为https
python·https·django
Neolnfra1 天前
渗透测试标准化流程
开发语言·安全·web安全·http·网络安全·https·系统安全