不是!我一个前端你面试问我 HTTP 和 HTTPS 干嘛?

180 阅读5分钟

一、前言

前几天有一位小伙伴找我诉苦,大概内容是面试的时候,HR让他说一下 HTTP 和 HTTPS 之前的区别和相关的工作原理,这让他感到很意外,觉得这根本不属于前端领域的东西呀,为什么要问这个问题呢。

image.png

好吧,我看到这段话的时候,愣了一下,回想起自己刚入门那会儿,也有同样的想法,觉得作为前端,只要掌握了 HTML、CSS、JS、Jquery(当时市场还对此技术有需求)、Vue 就足够了,除此之外的内容都应归属于后端。但随着工作时间和开发经验的增长,在与后端联调过程中发生了各种各样的奇葩问题,这些问题并不是单纯属于前端或后端的某一特定技术范畴,而是源自于网络领域。比如页面加载慢、数据传输的时候获取不到、跨域等问题。

只有懂得更多,排查问题的时候才能更有效率,就算去百度搜答案,你也得知道咋搜、咋描述能更准确。所以一定要让自己做一位懂王,不要只埋头研究自己平时用到的那点技术,还是要多拓展自己的知识库,等需要的时候能马上拿出来用。下面我要围绕 HTTP 和 HTTPS 的相关知识点详细讲讲,希望这篇文章能帮到对这方面有不清楚地方的同学。

二、什么是 HTTP 和 HTTPS

  • HTTP(HyperText Transfer Protocol)即超文本传输协议,是用于上传输数据的基础协议。它定义了浏览器与服务器之间如何进行通信,包括请求的方法(如 GET、POST 等)、请求和响应的格式等,以实现网页、图片、文件等资源的传输和获取。

  • HTTPS(HyperText Transfer Protocol Secure)即安全超文本传输协议,是在 HTTP 的基础上通过引入 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议进行加密而形成的。 它不仅具有 HTTP 的功能,还能保证数据在传输过程中的机密性、完整性和身份验证,为网络通信提供了更高的安全性。

简单总结来说就是:两者都是传递信息用的,HTTP 就像是一位奔放的裸奔少年,所传递的信息是“祼露”着的,不太安全。HTTPS 呢,相当于在身上加了一层“衣服”,把信息都包裹起来加密了,让别人看不到也改不了,这样传递信息就更安全。

image.png

三、HTTP 和 HTTPS 的区别

  1. 安全性: 这是两者最显著的区别。HTTPS 通过在 HTTP 基础上添加 SSL/TLS(下面会单独讲什么是SSL/TLS) 加密层来保证数据传输的安全性,防止数据在传输过程中被窃取、篡改或伪造。而 HTTP 数据以明文形式传输,安全性较低。

  2. 端口不同: HTTP 默认使用 80 端口,而 HTTPS 默认使用 443 端口。

  3. 证书要求: HTTPS 需要服务器配置有效的 SSL 证书,以验证服务器的身份并建立加密连接。HTTP 则不需要证书。

  4. 性能消耗: 由于 HTTPS 进行了加密和解密操作,会带来一定的性能开销,但随着硬件和算法的优化,这种影响在逐渐减小。

  5. 费用: 获取和维护有效的 SSL 证书通常需要一定的费用,而 HTTP 则没有这方面的成本。

SSL/TLS

SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全),其实就是能让网络通信变得更安全、保证数据完整的一种加密协议。

它会用一种叫“消息认证码”(MAC)的东西。就好比给数据弄了个特殊的“标签”,接收方收到数据后,会根据这个“标签”来检查数据有没有被改过。如果“标签”对不上,那就说明数据不完整或者被篡改了。

然后在传输数据的时候,计算数据的哈希值,如果接收方算出来的哈希值和发送方传过来的不一样,那就说明数据有问题。

SSL/TLS 协议会有一些机制来检测数据有没有丢失或者重复。比如会给每个数据包编号,接收方发现编号不对,就能知道数据是不是完整的。

image.png

四、HTTP 和 HTTPS 的原理

  • HTTP

    1. 浏览器向服务器发送一个请求,请求中包含了要访问的资源的路径、请求方法(如 GET、POST 等)以及一些其他的头部信息。

    2. 服务器接收到请求后,根据请求的内容进行处理,并将相应的资源(如网页、图片、文件等)返回给客户端。

    3. 服务器返回的响应包含了状态码(表示请求是否成功)、响应头部(包含关于响应的各种信息,如内容类型、长度等)和响应主体(即实际的资源内容)。

  • HTTPS

    1. 客户端向服务器发起连接请求,服务器将其数字证书发送给客户端。

    2. 客户端验证服务器证书的合法性,包括证书是否由受信任的证书颁发机构颁发、证书是否过期等。

    3. 验证通过后,客户端生成一个随机的对称密钥,并使用服务器的公钥对其进行加密,然后发送给服务器。

    4. 服务器使用自己的私钥解密得到对称密钥,此后双方使用这个对称密钥进行加密通信,确保数据的保密性和完整性。

五、除 HTTP 和 HTTPS 外的其它常见的网络协议(拓展)

  • TCP(传输控制协议)和 UDP(用户数据报协议): TCP 能保证数据可靠传输,UDP 传输速度快但不太保证可靠性。

  • FTP(文件传输协议): 专门用来在网络上传输文件。

  • FTP(文件传输协议): 专门用来在网络上传输文件。

  • SMTP(简单邮件传输协议)和 POP3(邮局协议版本 3): 这俩跟邮件的发送和接收有关系。

  • DNS(域名系统)协议: 能把域名转换成计算机能懂的 IP 地址。

  • SSH(安全外壳协议): 用于远程登录和执行命令,而且通信过程是加密的,比较安全。