跳到主要内容

题目 16- 题目 20

16,说说你对 http 协议中 HSTS 的理解​

HSTS,全称是 HTTP Strict Transport Security,即 HTTP 严格传输安全,是一种 Web 安全机制。HSTS 可以通过 HTTP 响应头 Strict-Transport-Security,指示浏览器在一段时间内强制使用 HTTPS 来访问某个网站,禁止通过 HTTP 连接,从而防止中间人攻击(MITM)和协议降级攻击。

HSTS 的工作原理

  1. 服务器启用 HSTS:服务器通过响应头 Strict-Transport-Security 告诉浏览器,该站点应该始终通过 HTTPS 访问。

  2. 浏览器强制 HTTPS:

3.保护作用:避免中间人通过拦截 HTTP 请求或劫持协议的方式,实施攻击。

基础配置

仅强制主域名使用 HTTPS:

测试代码
Strict-Transport-Security: max-age=31536000

包括子域名

强制主域名及所有子域名使用 HTTPS:

测试代码
Strict-Transport-Security: max-age=31536000; includeSubDomains

加入预加载列表

在主域名、子域名启用 HSTS,并支持预加载:

测试代码
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

HSTS 的优势

  1. 防止协议降级攻击:

    即使攻击者尝试通过 HTTP 劫持用户连接,HSTS 也会强制浏览器直接使用 HTTPS。

  2. 提高数据传输安全性:

    所有的传输内容都会通过 HTTPS 加密,防止敏感数据被窃取。

  3. 性能优化:

    避免 HTTP 到 HTTPS 的 301 重定向,提高首屏加载速度。

  4. 提升 SEO 排名:

    搜索引擎(如 Google)优先处理 HTTPS 站点,HSTS 可以提高安全性评分。

17,CORS 请求中,什么情况下会触发预检请求?​

触发预检请求的条件 预检请求会在以下情况下被触发:

  1. 请求方法不属于简单方法: 请求方法不在以下列表中时会触发预检请求:
  • GET
  • POST
  • HEAD
  1. 请求头包含非简单头: 如果请求中使用了自定义头或某些不被认为是“简单头”的 HTTP 请求头,浏览器会触发预检请求。例如:
  • 自定义头,如 X-Custom-Header。

  • 非简单头,如 Content-Type 设置为以下值之外的类型:

    • text/plain
    • application/x-www-form-urlencoded
    • multipart/form-data
  1. Content-Type 非简单类型:

当 Content-Type 不属于以下简单类型时:

  • text/plain
  • application/x-www-form-urlencoded
  • multipart/form-data
  1. credentials 的使用: 如果请求设置了跨域凭据标志(credentials: include),并且跨域时不符合简单请求规则,也可能触发预检请求。

  2. 使用了其他 HTTP 方法: 如果使用了如 PUT、DELETE、PATCH 等方法,通常会触发预检请求。

18.Blob,ArrayBuffer,Base64 分别有哪些使用场景?​

Blob、ArrayBuffer 和 Base64 在 Web 开发中有各自的使用场景:

  1. Blob:
  • 文件上传和下载:Blob 对象可以用于将文件数据存储为二进制形式,并进行上传或下载操作。
  • 图片处理:可以将图像数据存储为 Blob 对象,并进行处理、显示或上传。
  • 多媒体处理:可用于处理音频和视频等多媒体数据。
  • 生成临时 URL:可以使用 Blob 对象创建临时 URL,用于在浏览器中显示或分享文件。
  1. ArrayBuffer:
  • 图像处理:可以使用 ArrayBuffer 来处理图像数据,例如图像解码、图像滤镜等操作。
  • 网络请求:可用于处理二进制数据的网络请求,例如 WebSocket 通信或二进制协议的数据传输。
  • 数据加密:ArrayBuffer 可以用于加密算法的处理和操作。
  • Web Workers:ArrayBuffer 可用于在 Web Worker 中进行多线程数据处理。
  1. Base64:
  • 图片嵌入:Base64 编码可以将图片数据转换为字符串,可用于将图片嵌入到 HTML、CSS 或 JavaScript 中,减少网络请求。
  • 图片传输:在文本协议中,如 JSON 或 XML,可以使用 Base64 编码将图片数据传输到服务器或其他系统。
  • 数据 URL:可以将 Base64 编码的数据作为数据 URL 嵌入到 HTML 中,用于显示图像或其他媒体内容。
  • 数据存储:某些浏览器 API 或本地存储机制支持 Base64 编码的数据存储。

19.Http 3.0 是基于 udp 的,那么它是如何保证传输可靠性的?​

HTTP/3 使用的底层传输协议 QUIC 是基于 UDP 的,因此需要在应用层实现可靠的数据传输。QUIC 协议使用了以下几种机制来保证数据的可靠性:

  1. 连接迁移:QUIC 允许在网络切换或 IP 变更时迁移连接,而不需要重新建立新的连接,从而避免了连接中断和数据丢失的问题。

  2. 可靠性流控制:QUIC 在每个流上都实现了可靠的流控制机制,可以根据发送方和接收方的负载情况动态调整数据发送速率,从而优化传输效率和可靠性。

  3. 数据重传:QUIC 中每个数据包都带有唯一标识符(Packet Number),接收方可以根据这个标识符进行数据包的确认和重传,以保证数据传输的可靠性。

  4. 拥塞控制:QUIC 采用了基于 TCP 的拥塞控制机制,可以根据网络拥塞程度自适应调整发送速率,以避免网络拥塞和丢包等问题。

20.websocket 中的 Handshaking 是什么?​

  1. 客户端向服务器发送升级协议请求:客户端通过普通的 HTTP GET 请求向服务器发送一个包含特殊头部字段 Upgrade 和 Connection 的 HTTP 请求。

  2. 服务器相应升级协议请求:当服务器收到客户端的升级协议请求后,会对该请求进行处理,并返回一个特殊的响应头部字段 Upgrade 和 Connection,并附上一个随机生成的字符串(Sec-WebSocket-Key)作为握手口令。

  3. 客户端发送握手确认请求:客户端接收到服务器的响应之后,会对该响应进行处理,并根据约定的算法将服务器返回的 Sec-WebSocket-Key 字符串与一个魔术字符串拼接起来,然后进行 SHA1 加密,并将结果转换成 Base64 编码格式,最后将加密后的结果作为 Sec-WebSocket-Accept 字段值附在新的请求头部中,再次发送给服务器。

  4. 服务器确认握手请求:当服务器收到客户端的握手确认请求后,会对请求头中的 Sec-WebSocket-Accept 字段进行验证,如果验证通过,则表示握手成功,并且服务器会返回一个状态码为 101 的 HTTP 响应,表示 WebSocket 连接已经建立。

  5. WebSocket 连接建立:当客户端收到服务器的确认响应之后,WebSocket 连接就正式建立了,此时客户端和服务器都可以通过 WebSocket 协议进行双向通信。

title="连接原理"
  1. 利用 HTTP 建立连接:通过包含特殊头部字段的 HTTP 请求进行握手,以初始化连接。
  2. 建立 TCP 连接:在 HTTP 连接基础上,客户端和服务器建立 TCP 连接,并交换加密和压缩参数。
  3. 双向通信:TCP 连接建立后,双方可随时发送消息,无需 HTTP 请求,直接通过连接传递数据。
  4. 断开连接:任一方发送控制帧来关闭连接。
Loading Comments...