HTTP 原理和面试题

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: HTTP 原理和面试题

HTTPS系列干货(一):HTTPS 原理详解 - 知乎 (zhihu.com)

3.1 HTTP 常见面试题 | 小林coding (xiaolincoding.com)

HTTP 是什么

HTTP 是超文本传输协议

HTTP 与 HTTPS 有哪些区别?

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

HTTPS 是如何保证通信是安全的?

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

HTTPS 是如何建立连接的?TLS 握手概述?

SSL/TLS 协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥。
  • 双方协商生产「会话秘钥」。
  • 双方采用「会话秘钥」进行加密通信。

前两步也就是 TLS 握手阶段。TLS 的「握手阶段」涉及四次通信,使用不同的密钥交换算法,TLS 握手流程也会不一样的,现在常用的密钥交换算法有两种:RSA 算法 (opens new window)ECDHE 算法 (opens new window)

基于 RSA 算法的 TLS 握手过程:

ClientHello:

由客户端向服务器发起加密通信请求

客户端主要向服务器发送:

  • 协议版本
  • 用于 「会话秘钥」条件之一的随机数(Client Random
  • 密码套件列表

SeverHello:

服务器收到客户端请求后,向客户端发出响应

回应的内容有:

  • 确认 TLS 协议版本
  • 「会话秘钥」条件之一的随机数(Server Random
  • 确认的密码套件列表
  • 服务器的CA数字证书

客户端回应:

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

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

  • 一个随机数(pre-master key
  • 加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
  • 客户端握手结束通知,表示客户端的握手阶段已经结束。 同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。服务器和客户端有了三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」

服务器的最后回应:

服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的 「会话秘钥」

然后,向客户端发送最后的信息:

  • 加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
  • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

整个 TLS 的握手阶段全部结束

户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用 「会话秘钥」 加密内容。

客户端校验数字证书的流程是怎样的?

CA 签发证书的过程,如上图左边部分:

  • 首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值;
  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名;
  • 最后将 Certificate Signature 添加在文件证书上,形成数字证书;

客户端校验服务端的数字证书的过程,如上图右边部分:

  • 首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1;
  • 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ;
  • 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

证书信任链的问题

向 CA 申请的证书一般不是根证书签发的,而是由中间证书签发的。这是为了确保根证书的绝对安全性,将根证书隔离地越严格越好,不然根证书如果失守了,那么整个信任链都会有问题。

HTTPS 的应用数据是如何保证完整性的?

TLS 在实现上分为握手协议记录协议两层:

  • TLS 握手协议就是我们前面说的 TLS 四次握手的过程,负责协商加密算法和生成对称密钥,后续用此密钥来保护应用程序数据(即 HTTP 数据);
  • TLS 记录协议负责保护应用程序数据并验证其完整性和来源,所以对 HTTP 数据加密是使用记录协议;

TLS 记录协议主要负责消息(HTTP 数据)的压缩,加密及数据的认证

HTTP 常见到版本有 HTTP/1.1,HTTP/2.0,HTTP/3.0,不同版本的 HTTP 特性是不一样的。

HTTP/1.1、HTTP/2、HTTP/3 演变

HTTP/1.1 的优点有哪些?

1.简单: HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式。

2.灵活和易于扩展: HTTP 协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充

同时 HTTP 由于是工作在应用层( OSI 第七层),则它下层可以随意变化

  • 比如:HTTPS 就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层;
  • HTTP/1.1 和 HTTP/2.0 传输协议使用的是 TCP 协议,而到了 HTTP/3.0 传输协议改用了 UDP 协议。

HTTP/1.1 的缺点有哪些?

无状态:

无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。

无状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。

明文传输:不安全

HTTP/1.1 相比 HTTP/1.0 提高了什么性能?

  • 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
  • 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

但 HTTP/1.1 还是有性能瓶颈:

  • 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
  • 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;
  • 没有请求优先级控制;
  • 请求只能从客户端开始,服务器只能被动响应。

HTTP/2 做了什么优化?

1.头部压缩

如果同时发出多个请求,他们的头部是一样的或是相似的,那么,协议会帮你消除重复的部分

2.二进制格式

全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧(Headers Frame)和数据帧(Data Frame),这增加了数据传输的效率

3.并发传输

充分利用了 TCP连接, 实现并行交错地发送请求和响应

针对不同的 HTTP 请求用唯一的 Stream ID 来区分,接收端可以通过 Stream ID 有序组装成 HTTP 消息,不同 Stream 的帧是可以乱序发送的,因此可以并发不同的 Stream ,也就是 HTTP/2 可以并行交错地发送请求和响应

4.服务器主动推送资源

HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务端不再是被动地响应,可以主动向客户端发送消息。

HTTP/2 有什么缺陷?

todo

HTTP/3

  1. 基于QUIC协议:
  • HTTP/3 是基于 QUIC(Quick UDP Internet Connections)协议的。QUIC 是一个基于 UDP 的协议,旨在提供更低的连接建立延迟和更好的性能,特别是在不稳定的网络环境中。
  1. 多路复用:
  • HTTP/3 支持多路复用,这意味着它允许在单个连接上同时传输多个请求和响应,而无需按顺序等待。这有助于减少网络延迟,提高性能。
  1. 头部压缩:
  • 类似于 HTTP/2,HTTP/3 也支持头部压缩,以减小传输的数据量。这有助于减少网络带宽的使用。
  1. 0-RTT支持:
  • HTTP/3 支持 0-RTT(Zero Round Trip Time)连接,允许客户端在不进行完整握手的情况下发送数据。这有助于降低连接建立的延迟。
  1. 更好的流量控制:
  • HTTP/3 提供了更先进的流量控制机制,以更有效地管理数据流的传输,避免过度拥塞。
  1. 更好的安全性:
  • HTTP/3 的底层协议 QUIC 具有内置的加密,因此提供更好的安全性。这有助于防止一些传统的网络攻击,如中间人攻击。
  1. 适应性:
  • HTTP/3 的设计考虑了现代网络环境的特点,例如移动网络和不稳定的连接,以提供更好的适应性。
  1. 部署挑战:
  • 尽管 HTTP/3 带来了许多优势,但由于其基于 QUIC,需要底层支持 QUIC 的网络基础设施。这也导致了在全球范围内广泛部署 HTTP/3 的一些挑战。

总体而言,HTTP/3 通过引入 QUIC 协议,支持多路复用、头部压缩、0-RTT连接等特性,旨在提供更快、更安全的 Web 数据传输体验。


相关文章
|
4月前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
3月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
27天前
|
存储 NoSQL 前端开发
美团面试:手机扫描PC二维码登录,底层原理和完整流程是什么?
45岁老架构师尼恩详细梳理了手机扫码登录的完整流程,帮助大家在面试中脱颖而出。该过程分为三个阶段:待扫描阶段、已扫描待确认阶段和已确认阶段。更多技术圣经系列PDF及详细内容,请关注【技术自由圈】获取。
|
2月前
|
Java Linux 调度
硬核揭秘:线程与进程的底层原理,面试高分必备!
嘿,大家好!我是小米,29岁的技术爱好者。今天来聊聊线程和进程的区别。进程是操作系统中运行的程序实例,有独立内存空间;线程是进程内的最小执行单元,共享内存。创建进程开销大但更安全,线程轻量高效但易引发数据竞争。面试时可强调:进程是资源分配单位,线程是CPU调度单位。根据不同场景选择合适的并发模型,如高并发用线程池。希望这篇文章能帮你更好地理解并回答面试中的相关问题,祝你早日拿下心仪的offer!
51 6
|
3月前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
3月前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
3月前
【网路原理】——HTTP状态码和Postman使用
状态码(200,404,403,405,500,504,302),Postman下载和使用构造请求
|
3月前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
4月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
4月前
|
存储 安全 Java
面试高频:Synchronized 原理,建议收藏备用 !
本文详解Synchronized原理,包括其作用、使用方式、底层实现及锁升级机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
面试高频:Synchronized 原理,建议收藏备用 !

热门文章

最新文章