聊一下HTTP 与 HTTPS 的区别,以及HTTPS 的加密方式

作为前端开发,或多或少都听过 HTTP 和 HTTPS 的区别,甚至在写接口地址时早已习惯加个 "s",但你是否真正了解它们之间到底有什么不同?HTTPS 的安全到底"安全"在哪?今天我们就一起来聊聊!

一、HTTP 和 HTTPS,外表一样,灵魂不一样

从名字来看,HTTPS 就是在 HTTP 的基础上加了个 "S",这个 "S" 是 Secure(安全) 的意思,也就是------加密过的 HTTP。

HTTP 是什么?

HTTP(HyperText Transfer Protocol)是超文本传输协议,它定义了客户端(通常是浏览器)和服务端如何通信。它是 明文传输 的,意味着你发送的每一个请求、表单、密码,只要被人截获,就能直接看到内容。

这就像你在大马路上大喊 "我银行卡密码是 123456!" ------ 谁路过谁都知道。

HTTPS 呢?

HTTPS 在 HTTP 基础上增加了一层加密------通过 SSL/TLS 协议 对数据进行加密。简单理解,就是给数据包套上一层"保险箱",别人即使截获了,也打不开。

二、HTTP 和 HTTPS 的区别有哪些?

特性 HTTP HTTPS
是否加密 否,明文传输 是,基于 SSL/TLS 加密
默认端口 80 443
安全性 低,易被劫持、篡改 高,防劫持、防篡改、防监听
证书支持 不需要证书 需要 SSL 证书
性能消耗 相对低 稍高(但现在可忽略)

你可能会说,HTTPS 要多消耗一点性能啊,那我是不是可以只在登录、支付这些页面用 HTTPS?

这个做法在十年前可能合理,但现在几乎所有网站(包括博客、静态站)都默认全站 HTTPS,主要是因为:

  • 浏览器已经开始标记 HTTP 网站为"不安全";
  • Google 搜索权重也会优先考虑 HTTPS;
  • 性能开销已经很小了,尤其在 HTTP/2 推出之后反而更快。

三、HTTPS 的加密方式到底是什么?

很多人听到加密就头大,说什么对称加密、非对称加密一堆术语。其实不用太复杂,我们可以先理解"交换钥匙"的过程:

1. 对称加密:快,但密钥不能丢

对称加密就像两个人用同一把钥匙开门,比如 AES、DES。加密快,但问题是:密钥怎么传给对方?

如果我用快递寄给你密钥,一路上被人偷走,那就白加密了。

2. 非对称加密:安全,但效率低

这时就需要非对称加密,比如 RSA。有一把"公钥"和一把"私钥"。

  • 公钥人人可见,用它加密;
  • 私钥自己保存,用它解密。

比如你用我网站的公钥加密一段内容,只有我能解开。这样密钥就不用暴露在路上了,安全。

但非对称加密效率很低,尤其是对大文件。所以我们要 两者结合使用

3. 混合加密:TLS 的真面目

阶段1:握手阶段(用非对称加密)

  • 目的:安全地协商出一个对称加密的密钥
  • 过程:
    1. 客户端用服务器的公钥加密一个随机数
    2. 服务器用私钥解密得到这个随机数
    3. 双方基于这个随机数生成相同的对称密钥

阶段2:数据传输阶段(用对称加密)

  • 目的:高效地传输实际数据
  • 过程:所有网页内容、表单数据等都用刚才协商的对称密钥加密

形象的比喻

想象你要给朋友寄一个装满钱的箱子:

  1. 握手阶段:你们先用"挂号信"的方式(非对称加密)安全地交换箱子的密码
  2. 数据传输阶段:然后用这个密码锁住箱子(对称加密)快速寄送

具体的技术流程

arduino 复制代码
客户端 → 服务器: "我支持这些加密算法"
服务器 → 客户端: "我选择AES-256,这是我的证书和公钥"
客户端 → 服务器: "好的,我生成了一个随机数,用你的公钥加密发给你"
服务器 → 客户端: "收到,我们现在都有了相同的密钥"
双方: "开始用AES-256加密传输数据"

为什么这样设计?

  1. 安全性:非对称加密解决了密钥分发问题
  2. 效率:对称加密保证了数据传输速度
  3. 实用性:结合了两者的优点,避免了各自的缺点

这就是为什么HTTPS既安全又不会太慢的原因。它在建立连接时花一点时间用非对称加密"握手",然后在传输数据时用高效的对称加密。

四、那 HTTPS 就绝对安全吗?

不能说绝对,但比明文 HTTP 强太多太多。

HTTPS 可以防止:

  • 被中间人劫持(比如运营商注入广告);
  • 被监听内容(比如你密码、token 被抓包);
  • 被篡改数据(比如返回的 JSON 被改动);

但要注意几点:

  • 如果你网站证书没配好,浏览器照样报红;
  • 如果你把密码打印在控制台,再加密也没用;
  • 如果你的 JS 被 CDN 替换,HTTPS 也救不了你。

五、总结

  • HTTP 是明文,HTTPS 是加密的;
  • HTTPS 是通过 SSL/TLS 协议实现加密的,混合使用非对称加密和对称加密;
  • 建议所有网站都默认启用 HTTPS,不要等浏览器"红叉"才改。
相关推荐
风清云淡_A2 分钟前
【Flutter3.8x】flutter从入门到实战基础教程(四):自定义实现一个自增的StatefulWidget组件
前端·flutter
curdcv_po4 分钟前
🔥 Three.js 一个项目用到:轨道控制器、动画与GUI交互
前端
琹箐5 分钟前
CSS font-weight:500不生效
前端·css
代码的余温25 分钟前
React核心:组件化与虚拟DOM揭秘
前端·react.js·前端框架
小螺号dididi吹26 分钟前
【React】状态管理
前端·javascript·react.js
代码的余温30 分钟前
React Refs:直接操作DOM的终极指南
前端·javascript·react.js
一只小风华~41 分钟前
JavaScript 定时器
开发语言·前端·javascript·vue.js·web
朝阳391 小时前
浏览器【详解】requestIdleCallback(浏览器空闲时执行)
前端·浏览器
典学长编程1 小时前
前端开发(HTML,CSS,VUE,JS)从入门到精通!第二天(CSS)
前端·javascript·css·html
丘山子2 小时前
DNS 原理入门
前端·后端·面试