HTTP、HTTPS2

HTTP和HTTPS有什么区别

HTTPS=HTTP+加密+认证+完整性。

最本质的区别:安全和加密
  • HTTP明文传输,途径的运营商,路由器,黑客能直接看到内容
  • HTTPS密文传输,数据发送前加密成乱码,只有拥有钥匙的服务器能解开,即使被截获了也是一串无意义的字符
连接建立的过程
  • HTTP三次握手后就开始发送信息
  • HTTPS在TCP三次握手后,还要进行TLS握手,服务器给浏览器数字证书(CA证书),浏览器验证后,双方协商出秘钥,之后开始传输数据
端口号和资源消耗

HTTP默认端口80,HTTPS默认443

HTTP消耗服务器资源较低,HTTPS较高

HTTP不需要证书,HTTPS需要证书

误解

HTTPS确实要比HTTP慢一些,但是没有慢很多。TLS1.3(1RTT或者0RTT)减少握手开销,会话复用和强制跳转,使得损耗控制在10%

完整性
  • HTTP:数据传输过程中可能被运营商加上广告
  • HTTPS:带有消息完整性校验,哪怕篡改一个字节也能被检测出来

HTTPS的秘钥交换和证书校验的全过程

0:建立TCP连接

先建立TCP连接(HTTP3.0另算)

1:证书校验

服务器发送证书给客户端时

  1. 服务器发送"证件包":数字证书(域名、公钥、有效期、CA签名)和整个证书链(根CA到中间CA)
  2. 浏览器查验真伪:
    • 看有效期是否过期
    • 看域名是否匹配
    • 查看证书有没有被拉黑
    • 用本地的根CA公钥,解密证书的CA签名,成功解密,校验通过
  3. 提取公钥:验证成功后拿到公钥
2:密钥交换
  1. 浏览器打招呼

    • 发送支持的密码列表
    • 发送随机数a
    • 生成临时公私钥(两个),公钥(1个)明文发送给服务器
  2. 服务器回应

    • 从密码套件选一个,发随机数b
    • 发证书(第一阶段)
    • 服务器生成公私钥,公钥发给客户端
  3. 双方同时计算

    • 客户端根据客户端私钥和服务端公钥算一个数c
    • 服务器根据客户端公钥和服务端私钥算一个数c

    这个数双方完全相同

3:生成会话密钥

a,b,c三个随机数,生成一个秘钥。

4:加密通信

浏览器发一条完成(Finished)消息,用秘钥加密

服务器收到用秘钥解密,校验通过

服务器回应一个完成(Finished)消息

TLS握手完成

非对称加密

非对称加密通信开销比较大,只需要用非对称加密计算一个秘钥,后续通信使用对称加密即可,保证性能和安全。

总共出现了哪些公钥私钥?客户端随机公钥私钥,服务器随机公钥私钥,证书公钥(客户端),证书私钥(服务器)。

TLS中使用了什么算法

第一类:密钥交换算法,非对称(一方公钥一方私钥)

TLS1.3使用ECDHE(椭圆曲线迪菲-赫尔曼),计算数c。

第二类:身份验证算法,非对称

服务器发送证书,用私钥签名,客户端用证书公钥验证签名,证明服务器确实有这个私钥。

RSA算法,ECDSA(椭圆曲线数字签名)

第三类:对称加密算法

AES算法。拿密钥对明文加密解密

第四类:哈希和伪随机函数

SHA-256/SHA-384(安全哈希算法):a,b,c三个随机数反复进行SHA-256哈希,得到一个较长的,随机性强的对称密钥。

服务器发证书,客户端校验时:直接用私钥加密证书太大,先哈希得到指纹再加密这个指纹,然后客户端同样哈希算一遍这个证书得到指纹,再用公钥解密服务器传来的加密指纹。对比指纹是否一致。防篡改,提升效率

HTTP&WebSocket

本质区别
  • HTTP是请求-响应模型,客户端可以主动发起请求,服务器不能主动给客户端发消息
  • WebSocket是全双工持久连接,客户端和服务器可以互相发送信息
多角度对比
维度 HTTP WebSocket
通信方向 单向触发,只能由客户端发起 双向实时,可以双方主动发
协议头开销 开销较大 没有重复header,连接建立好后只有轻量级数据帧
二进制支持 处理较为笨重 原生支持二进制
连接升级过程
  1. 客户端发起一个特殊GET请求
  • connection:upgrade
  • upgrade:websocket
  • sec-websocket-key
  1. 服务器回复101(协议切换)
  2. TCP连接上的协议由HTTP变成了Websocket
WebSocket和轮询

没有WebSocket的时候,想知道服务器要不要主动推数据,必须前端不断轮询。

  • 轮询:每次要发一个HTTP头,存在延迟
  • WebSocket:握手后,服务器收到消息就能推送,节省带宽(HTTPheader开销)和服务器CPU(如果有信息要发送,就阻塞等待请求到来)。
场景

大多数时候使用HTTP

实时交互强的时候使用websocket

  • 即使聊天(网页微信)
  • 在线游戏(多人对战)
  • 协同编辑(飞书文档)

WebSocket的工作过程

1:建立连接

通过HTTP协议,升级协议

客户端:

html 复制代码
Connection: Upgrade        // 告诉服务器我要切换协议
Upgrade: websocket         // 指定要切换成 WebSocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==  // 随机 Base64 码(防缓存代理)

服务器:

html 复制代码
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= // 经过加密算法计算出的校验值
2:数据传输

不再发送HTTP报文,而是发送轻量级数据帧,帧头仅2-14字节

帧包括:

  • FIN:是否是该消息的最后一帧(传输大文件)
  • opcode(操作码):这个帧干什么的
  • 数据长度
  • 掩码:客户端发送给服务器的数据必须加掩码(XOR 加密)

...

特点:全双工,客户端发完消息不用等回复,服务器也可以随时推送数据。无HTTP头部冗余。

3:保活与关闭

连接可能被切断,可以互发特殊帧确认连接是否存活(这个不是超时连接断开)

  • ping帧(通常由服务器发起)
  • pong帧(另一方回复相同载荷)
  • 维持网络不被中间网络设备断开,确认对方是否掉线

关闭连接:

一方要关闭,发送close帧。对方收到后回复一个相同的close帧。

为什么要掩码
  • 原因 :早期 WebSocket 草案曾引发缓存污染攻击。恶意网页可以让浏览器发起 WebSocket 请求,由于数据可控,攻击者可以将 HTTP/1.1 200 OK 等 ASCII 码伪装成 WebSocket 数据发往代理服务器,污染代理缓存。
  • 解决方案 :让客户端用密钥(掩码)对数据进行 XOR 异或处理,使得数据在到达代理服务器时看起来是完全随机的乱码,无法被代理误认为 HTTP 响应,从而彻底杜绝该漏洞,wss密文传输也是一样的效果。

SSE和WebSocket的区别

SSE和WebSocket的核心区别在于,SSE是单向(服务器到客户端),WebSocket是全双工的。

特性 SSE (Server-Sent Events) WebSocket
通信方向 单向:仅服务器向客户端推送数据。 双向:客户端和服务器可随时互相发送数据。
协议基础 标准 HTTP/HTTPS,无需额外协议升级。 独立协议 (ws/wss),需通过 HTTP 升级握手。
实现复杂度 简单 ,浏览器原生 EventSource API 即可实现。 较复杂,需处理更多连接状态和逻辑。
自动重连 内置,浏览器自动处理,支持断点续传。 需手动实现,需自己编写心跳检测和重连逻辑。
数据格式 仅文本 (UTF-8) 文本和二进制,如图片、文件等。
连接数限制 HTTP/1.1 下同源限制约6个;HTTP/2 下可多路复用。 无浏览器同源连接数限制。(不受HTTP限制)
代理/防火墙 兼容性好,标准 HTTP 流量易通过。 可能被拦截,升级握手可能被严格网络环境阻止。
场景

如果是服务器单向给客户端发消息,用SSE更加简单和轻量

  • 消息推送:新闻,通知
  • 实时数据:体育赛事比分等
  • AI流式响应(可以用HTTP吗?可能太大了,而且是请求-响应式的,不适合流式)

如果客户端和服务器频繁交互,选择WebSocket

  • 即时聊天
  • 多人协作
  • 在线游戏

如果要传输的数据是二进制也选择WebSocket更好。可以同时使用二者

相关推荐
斌蔚司李19 小时前
Tp-link手动设置有线中继模式(图文版)
网络·智能路由器
YYYing.19 小时前
【C++大型项目之高性能服务器框架 (九) 】协议抽象与Http服务器模块
服务器·c++·http·高性能·c/c++·后端框架
运维大师19 小时前
【K8S 运维实战】03-网络模型实战CNI
运维·网络·kubernetes
_waylau20 小时前
Spring Framework HTTP服务客户端详解
java·后端·网络协议·spring·http·spring cloud
Android-Flutter20 小时前
Android的http和https知识点
android·http·https
数智化管理手记20 小时前
全面预算管理执行偏差大?全面预算管理全流程落地步骤是什么
大数据·网络·数据库·人工智能·数据挖掘
爱刷碗的苏泓舒20 小时前
网络通信入门之 NTRIP、HTTP、TCP 与 IP 的关系:协议分层、连接过程以及实时数据流
网络协议·tcp/ip·http·网络通信·rtcm·监控运维·ntrip
三垣网安21 小时前
记一次渗透测试 | 信息收集之Github信息收集
网络
Lhappy嘻嘻21 小时前
网络(四)|全网最细网络层原理:IP 协议、IP 地址分类、子网划分、路由转发、NAT 穿透详解
java·笔记·网络协议·计算机网络