HTTP常见面试题

HTTP常见面试题

学习资源 小林coding 2022.3.30

HTTP基本概念

HTTP是什么?

HTTP 超文本传输协议

超文本 传输 协议 三部分

  1. 协议:HTTP是用在计算机中的协议 使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上参与者),以及相关控制和错误处理的方式(行为约定和规范)

  2. 传输: HTTP 双向协议 数据两端之间传输 允许中转与接力

    HTTP是一个在计算机世界里面专门用来在两点间传输数据的约定和规范

  3. 超文本 -> 超越普通文本的文字 -> 典型HTML

HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。

HTTP只能从互联网 -> 本地服务器?

X 还可以是S-S 采用两点之间描述

HTTP常见状态码

HTTP常见字段

host字段

有了 Host 字段,就可以将请求发往「同一台」服务器上的不同网站。

Content-Length

表示本次回应的数据长度

Connection

常用于客户端要求服务器使用TCP持久连接 以便其他请求复用

HTTP/1.1 默认持久连接 ->兼容老版本

Connection: keep-alive

Content-Type

说明客户端发送的格式

Content-Type: text/html; charset=utf-8

上面的类型表明,发送的是网页,而且编码是UTF-8。

客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。

Accept: */*

Content-Encoding

表明服务器数据的压缩方式

Content-Encoding: gzip

上面表示服务器返回的数据采用了 gzip 方式压缩,告知客户端需要用此方式解压。

客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。

Accept-Encoding: gzip, deflate

GET&POST

GET : 从服务器获取指定的资源

请求参数 一般写在URL中 URL规定只支持ASCII 浏览器会对URL长度有限制

POST: 根据请求负荷(报文body)对指定的资源做出处理

安全和幂等性

安全:请求方法不会 破坏 服务器上的资源

幂等: 执行多次相同的结果 结果都是相同的

GET : 安全且幂等 只读

可以对GET请求的数据做缓存

缓存可存在于 浏览器 代理(Nginx) 浏览器中get可以保存为书签

POST: 新增或提交数据 修改资源 不安全 不可缓存

避免传输过程中数据被窃取 使用HTTPS协议 所有HTTP数据都会被加密传输

GET请求也可以携带body

POST URL请求后也可以加参数

HTTP特性

HTTP1.1

  1. 简单

    HTTP基本报文形式 header+body

    头部信息k-v

  2. 灵活易于拓展

    允许开发人员自定义扩充

    HTTP运行在应用层 OSI第七层 下层可以随意变化

    HTTPS: HTTP TCP 之间增加了SSL/TLS安全传输层

    HTTP/3 把TCP换成了基于UDP的QUIC

  3. 应用广泛和跨平台

缺点:无状态 明文传输 不安全

  1. 无状态

    服务器不会去记忆HTTP的状态 不需要额外资源记录状态信息

    减轻服务器负担

    完成关联性操作时很烦 每次需要鉴权

    解决方案:Cookie

  2. 明文传输

    信息裸奔

  3. 不安全

    • 通信明文不加密 内容窃听

    • 不验证身份 伪装

    • 无法证明报文完整性 可能遭篡改

    解决方案:HTTPS

HTTP1.1性能

HTTP基于TCP/IP 请求-应答 的通信模式

  1. 长连接

    问题:HTTP/1.0 每次发起连接 三次握手四次挥手 串行 增加通信开销

    解决:长连接只要任意一端没有明确提出断开连接 则保持TCP连接状态

  2. 管道网络传输

    在同一个TCP连接里面 客户端可以发起多个请求 不必串行发送

    减少整体的响应时间

    服务器 按照顺序 队头堵塞

  3. 队头堵塞

    按顺序发送请求队列 阻塞

    因此1.1性能一般般

HTTP与HTTPS

区别

  1. HTTP超文本传输协议 明文传输

    HTTPS 加入 SSL/TLS 安全协议

  2. HTTP建立简单 三次握手 HTTPS 三次握手+SSL/TLS握手

  3. 端口 80 443

  4. HTTPS 需要向CA(证书权威机构申请数字证书)保证服务器的身份是可信的

解决问题

  • 信息加密

  • 校验机制

  • 身份证书

如何解决

  • 混合加密

  • 摘要算法 指纹 完整性

  • 服务器公钥 数字证书

  1. 混合加密 对称加密 + 非对称加密

    • 通信建立前 非对称加秘密 交换 会话密钥 后续不再使用

    • 通信过程中 全部使用 对称加密 加密 明文数据

      采用「混合加密」的方式的原因:

    • 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。

    • 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。

  2. 摘要算法

    客户端在发送明文之前会通过摘要算法算出明文的「指纹」,发送的时候把「指纹 + 明文」一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的「指纹」和当前算出的「指纹」做比较,若「指纹」相同,说明数据是完整的。

  3. 数字证书

    客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

    服务器公钥存放在数字证书中

    HTTPS建立连接过程

    SSL/TLS协议基本流程:

    • 客户端向服务器索要验证服务器公钥

    • 双方协商生产会话密钥

    • 双方采用密钥进行加密通信

    SSL/TLS四次通信

1. ClientHello

首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。

在这一步,客户端主要向服务器发送以下信息:

(1)客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。

(2)客户端生产的随机数(Client Random),后面用于生产「会话秘钥」。

(3)客户端支持的密码套件列表,如 RSA 加密算法。

2. SeverHello

服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。服务器回应的内容有如下内容:

(1)确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。

(2)服务器生产的随机数(Server Random),后面用于生产「会话秘钥」。

(3)确认的密码套件列表,如 RSA 加密算法。

(4)服务器的数字证书。

3.客户端回应

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

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

(1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。

(2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。

上面第一项的随机数是整个握手阶段的第三个随机数,这样服务器和客户端就同时有三个随机数,接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。

4. 服务器的最后回应

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

(1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。

HTTP/1.1 2 3 演变

HTTP/1.1

优点: 长连接 管道

缺点: 头部未压缩 队头阻塞 没有优先级控制 请求只能从客户端到服务器

HTTP/2

优点 : 头部压缩 消除重复部分 提高速度

HPACK 算法 客户端服务器维护一张头信息表 只发送索引号 提高速度

二进制格式:头信息和数据体都是二进制 为帧

数据流:可以指定优先级

多路复用: 一个连接中并发多个请求或相应 不用按照顺序一一对应

服务器推送 服务器可以主动向客户端发送信息

问题: 如果丢包 重传 所有HTTP请求都得等待丢包重传

所以 HTTP3把HTTP下层的TCP改为UDP

UDP可靠性 QUIC协议

  • QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响

  • TLS3 升级成了最新的 1.3 版本,头部压缩算法也升级成了 QPack

  • HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值