跳到主要内容

题目 31 - 题目 35

31.为什么推荐将静态资源放到 cdn 上?​

CDN(内容分发网络)是一种分布式网络,由分布在不同区域的边缘节点服务器群组成。CDN 通过缓存静态内容,使得用户可以直接从最近的 CDN 节点获取内容,从而加速访问速度并减轻源站的压力。CDN 不适用于动态内容的加速,因为动态内容需要服务器实时生成。

CDN 的工作原理是用户通过浏览器访问网站时,DNS 服务器将域名解析成 CDN 节点的 IP 地址,CDN 根据用户的 IP 地址和请求内容选择最近的缓存服务器,如果缓存服务器上有请求内容则直接响应,否则向上级服务器请求内容。

32.介绍下 304 过程​

首先 304 状态码是对客户端有缓存情况下服务端的一种响应。

客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。

因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。服务端只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。

对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。

因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。

33.301、302、303、307、308 这些状态码有什么区别?​

3xx 状态码系列代表重定向,包括以下几种:

  1. 301 Moved Permanently:表示资源永久移除,通常用于网站迁移或 URL 变更。浏览器会缓存此重定向,并且后续请求会自动使用新 URL。
  2. 302 Found:与 301 类似,表示资源临时移除,浏览器会缓存此重定向,但后续请求仍使用原始 URL。在早期的 HTTP 规范中,302 禁止自动将 POST 请求重定向为 GET 请求,以避免参数丢失,但实际浏览器实现并不完全遵循这一规定。
  3. 303 See Other:用于明确告知客户端应使用 GET 方法访问新 URL,而不是原始请求方法。
  4. 307 Temporary Redirect:与 302 类似,表示资源临时移除,但不允许浏览器将 POST 请求重定向为 GET 请求,以保持请求方法的完整性。
  5. 308 Permanent Redirect:类似于 301,表示资源永久移除,但不允许浏览器将 POST 请求重定向为 GET 请求。

这些状态码的目的是为了告诉浏览器如何处理重定向,并确保用户请求的资源可以正确到达。301 和 308 允许缓存,而 302、303 和 307 的缓存行为则依赖于浏览器实现。308 是 307 的永久版本,两者的主要区别在于对请求方法的处理。

34.TLS 1.3 做了哪些改进?​

TLS 1.2 是一种广泛使用的网络安全协议,自 2008 年发布以来,一直是互联网通信的标准之一。然而,随着技术的发展和安全威胁的增加,TLS 1.3 在 2018 年被推出,对 TLS 1.2 进行了多项改进,以提高安全性和性能。

TLS 1.3 通过以下方式加强了安全性:

  1. 减少加密算法:从 TLS 1.2 的多种加密算法中,TLS 1.3 只保留了五个加密套件,包括 AES 和 CHACHA20 等对称加密算法,以及 GCM 和 POLY1305 等分组模式,以及 SHA256 和 SHA384 等哈希算法。
  2. 弃用 RSA:TLS 1.3 弃用了 RSA 作为密钥交换算法,转而使用 ECDHE(椭圆曲线 Diffie-Hellman 密钥交换),因为它具有前向安全性,即使私钥被泄露,也不会影响之前加密的数据。

TLS 1.3 通过以下方式提高了性能:

  1. 改进握手流程:TLS 1.3 简化了握手流程,减少了 RTT(往返时间),使得客户端和服务器在第一次握手时就能开始计算密钥,从而提高了连接速度。
  2. 会话复用:TLS 1.3 支持会话复用,包括使用 Session ID 和 Session Ticket。Session Ticket 减少了服务器的存储压力,但需要定期更换密钥以保持安全性。
  3. PSK(预共享密钥):TLS 1.3 支持 PSK,允许客户端在发送 Session Ticket 时携带应用数据,实现零 RTT 连接,但这也增加了服务器被攻击的风险。

35.如何理解 HTTP 代理?​

代理服务器的功能

  • 负载均衡:代理服务器可以根据算法将客户端请求分发给不同的源服务器,以平衡负载。
  • 安全保障:代理服务器可以监控源服务器的状态,剔除故障服务器,并对数据进行过滤,限制非法 IP 访问。
  • 缓存代理:代理服务器可以缓存常用内容,提高访问速度,减少对源服务器的请求。

相关头部字段

  • Via:记录请求和响应在 HTTP 传输中经过的代理服务器,有助于追踪请求路径。
  • X-Forwarded-For:记录原始客户端的 IP 地址,经过代理时会被修改。
  • X-Real-IP:记录客户端的真实 IP 地址,即使经过多个代理也不会改变。
  • X-Forwarded-Host:记录客户端的原始域名。
  • X-Forwarded-Proto:记录客户端使用的原始协议(如 HTTP 或 HTTPS)。

X-Forwarded-For 产生的问题

  • 性能问题:代理必须解析 HTTP 请求头,修改 X-Forwarded-For 字段,这可能降低性能。
  • HTTPS 问题:在 HTTPS 通信中,原始报文不允许修改,因此 X-Forwarded-For 字段无法直接使用。

代理协议

为了解决 X-Forwarded-For 带来的问题,可以使用代理协议。代理协议通常使用明文版本,在 HTTP 请求行中添加特定的文本,以指示代理服务器的存在和路径。这样可以在不修改原始报文的情况下,记录请求路径和客户端 IP。

Loading Comments...