Skip to main content

HTTP

对 http 和 https 的了解 √✨

http 和 https 的基本概念

  • http:

    • 是一种超文本传输协议,用于规范化在客户端和服务端之前传输文字、图片、音频、视频等超文本数据的行为
  • https:

    • 是 http 的安全版,在 http 的基础上在传输层加入 SSL 加密,
    • 用于建立一个信息安全通道,确保网站的真实性

http 和 https 的区别

  • http:

    • 数据未加密
    • 一般端口是 80
  • https:

    • SSL 协议对数据加密
    • 一般端口是 443
    • 需要 ca 证书,费用高
    • 握手阶段比较费时,缓存不如 http 高效

从浏览器地址栏输入 url 到请求返回发生了什么 √✨

  1. 输入 URL 后解析出协议、主机、端口、路径等信息
  2. DNS 域名解析
  3. TCP 连接
  4. http 请求
  5. 服务器处理请求并返回 HTTP 报文
  6. 浏览器渲染页面
  7. 断开 TCP 连接

对 TCP 三次握手和四次挥手的理解 √✨

三次握手:

  • A:请求建立连接
  • B:收到建立连接的请求
  • A:连接已建立

为什么需要三次握手,两次不行吗?其实这是由 TCP 的自身特点可靠传输决定的。客户端和服务端要进行可靠传输,那么就需要确认双方的接收和发送能力。第一次握手可以确认客服端的发送能力,第二次握手,确认了服务端的发送能力和接收能力,所以第三次握手才可以确认客户端的接收能力。不然容易出现丢包的现象。

四次挥手

  • A:客户端请求关闭连接
  • B:服务端收到关闭信号,还有数据需要传输
  • B:服务端数据传输完成,服务端同意关闭连接
  • A:客户端确定关闭连接

为什么需要四次挥手

因此请求断开连接的报文和确认断开连接的报文不能一起发送。所以断开连接的时候才需要四次挥手来完成。

http 状态码 √✨

1.1 状态码分类

1xx - 服务器收到请求。 2xx - 请求成功,如 200。 3xx - 重定向,如 302。 4xx - 客户端错误,如 404。 5xx - 服务端错误,如 500。

1.2 常见状态码

200 - 成功。 301 - 永久重定向(配合 location,浏览器自动处理)。 302 - 临时重定向(配合 location,浏览器自动处理)。 304 - 资源未被修改。 403 - 没权限。 404 - 资源未找到。 500 - 服务器错误。 504 - 网关超时。

如何理解 http 缓存 √✨

https://juejin.cn/post/7101942484543995934

什么是 http 缓存 缓存就是存储静态资源,减少重复资源请求

http 缓存的好处 当浏览器打开一个页面时,浏览器会根据你输入的 URL 到对应的服务器上请求资源。等待请求资源这段时间页面就会白屏。 如果想要提高用户体验,就需要用到缓存,有一个良好的缓存策略可以减少重复资源的请求,降低服务器的开销,提高用户页面的加载速度。

http 缓存的类型 http 缓存分为强制缓存和协商缓存两种。

在浏览器加载资源的时候,首先会根据请求头判断是否命中强缓存策略,如果命中强缓存,去本地获取缓存资源,如果没有命中强缓存,则向服务器发送请求,验证协商缓存是否命中,如果命中协商缓存则返回 304 状态码,否则返回新的资源数据。

如何理解强制缓存和协商缓存 √✨

强制缓存代表的是去本地获取缓存资源还是去服务器获取资源

协商缓存代表的是返回状态码 304,还是返回新的资源数据

首先判断强制缓存是否命中,然后再判断协商缓存是否命中。

强制缓存

强制缓存通过 expires 和 cache-control 设置过期时间,Cache-Control 优先级高于 Expires

Expires 表示资源的过期绝对时间,假设客户端和服务器时间不同,会导致缓存命中误差

Cache-Control 通过不同的属性值代表不同的缓存定义:

  • public:表示响应资源既可以被客户端缓存也可以被代理服务器缓存。
  • private:表示响应资源只能被浏览器缓存,默认是 private
  • max-age:缓存最大过期时间,值是相对时间。
  • no-cache:储存在本地缓存区中。
  • no-store:不缓存任何数据

协商缓存

协商缓存通过 Last-Modified、Etag 定义,Etag 的优先级更高。

Last-Modified 有两个缺点

  • 只能精确到秒级
  • 资源的最后修改时间变了但是内容没变时有缓存误差

Etag 有一个缺点

  • 服务器需要对文件资源进行 etag 计算,需要付出额外的计算开销,如果资源的尺寸比较大,生成 Etag 的过程可能会影响服务器的性能

Last-Modified:资源的最后修改时间。 Etag:资源的唯一标识(一个字符串,类似于人类的指纹)。

首先服务器对比客户端传来的 If-None-Match 和当前服务器上的 etag 是否一致,如果一致,命中协商缓存

如果不一致,对比客户端传来的 If-Modified-Since 和当前服务器上的 Last-Modified,如果服务器上的 Last-Modified 更小,命中协商缓存

三种刷新操作对 http 缓存的影响 √✨

地址栏输入或地址栏前进后退:强制缓存有效,协商缓存有效。 手动刷新:强制缓存失效,协商缓存有效。 强制刷新:强制缓存失效,协商缓存失效。

GET 和 POST 的区别 √✨

从 5 个角度出发,GET 和 POST 有较大区别。

  1. 从参数的角度,GET 参数一般放在 URL 中,有长度限制而且不安全,POST 放在请求体中,没有长度限制也更适合传输敏感信息。
  2. 从编码的角度,GET 只能进行 URL 编码,而 POST 没有限制。
  3. 从缓存的角度,GET 请求参数会被保存在浏览历史记录里,POST 不会。
  4. 从 TCP 的角度,GET 请求会把请求报文一次性发出去,而 POST 会分为两个 TCP 数据包,首先发 header 部分,如果服务器响应 100(continue), 然后发 body 部分。(火狐浏览器除外,它的 POST 请求只发一个 TCP 包)
  5. 从幂等性的角度,GET 是幂等的,而 POST 不是。(幂等表示执行相同的操作,结果也是相同的)

理解 websocket √✨

websocket 是浏览器与服务器进行双向通信的协议,基于 TCP 传输协议,并复用 HTTP 的握手通道。

优点:刚刚

  • 支持双向通信,实时性更强。
  • 更好的二进制支持。
  • 协议控制的数据包头部较小。
  • 支持扩展。用户可以扩展协议,或者实现自定义的子协议。

理解 HTTP2 √✨

http2.0 是 http1.1 之后的重大更新。相较于 http1.1,http2 针对 4 个方面进行了改进

  • 二进制分帧层:HTTP2.0 会将所有的传输信息分割为更小的信息或者帧,并进行二进制编码
  • 允许多路复用:让所有的通信都在一个 TCP 连接上完成,实现请求并发
  • 头部压缩:采用 HPACK 压缩首部,减小体积
  • 服务器端推送:服务器可以预测客户端需要的资源,主动推送到客户端