【技术】HTTP常用知识

HTTP常见状态码

  • 1XX:消息

    • 101 Switch Protocol:升级协议,如从 http 到 ws,此时需要反向代理支持,如 Nginx。
  • 2XX:成功

    • 200 Ok: 成功
  • 3XX:重定向

    • 301 Moved Permanently:永久重定向
    • 302 Found:临时重定向
    • 304 Not Modified:自上次请求,未修改的文件
  • 4XX:客户端错误

    • 400 Bad Request:错误的请求
    • 401 Unauthorized:未被授权,需要身份验证,例如token信息等等
    • 403 Forbidden:请求被拒绝
    • 404 Not Found:资源缺失,接口不存在,或请求的文件不存在等等
  • 5XX:服务端错误

    • 500 Internal Server Error:服务器端未知错误,一般不允许出现。
    • 502 Bad Gateway:从上游应用层未返回响应,上游应用层挂了
    • 503 Service Unavailable:服务暂时无法使用
    • 504 Gateway Timeout:网关超时,上游应用层迟迟未响应

HTTP报文

GET和POST差异

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST没有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。
  • GET产生一个TCP数据包;POST产生两个TCP数据包。

HTTP 缓存

Http 缓存分为以下两种,两者都是通过 HTTP 响应头控制缓存

  • 强制缓存

再次请求时无需再向服务器发送请求

  • 协商缓存

再次请求时,需要向服务器校验新鲜度,如果资源是新鲜的,返回 304,从浏览器获取资源

缓存策略

关于 http 缓存配置的最佳实践为以下两条:

  • 文件路径中带有 hash 值:一年的强缓存。因为该文件的内容发生变化时,会生成一个带有新的 hash 值的 URL。前端将会发起一个新的 URL 的请求。配置响应头 Cache-Control: public,max-age=31536000,immutable

  • 文件路径中不带有 hash 值:协商缓存。大部分为 public 下文件。配置响应头 Cache-Control: no-cache 与 etag/last-modified

HTTP Header

gzip 配置

一句话:gzip 的核心是 Deflate,而它使用了 LZ77 算法与 Huffman 编码来压缩文件,重复度越高的文件可压缩的空间就越大。

因此 gzip 用于 HTTP 文件传输中,比如 JS、CSS 等,但一般不会压缩图片。在 HTTP Response 报文中,用 Content-Encoding 指明使用 gzip 压缩,而以下响应头在大部分生产环境的响应报文中都可以看到。

跨域

HTTPS

HTTPS中如何保证证书是可信任的

  • 数字签名: 数字签名的原理其实很简单,就是把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是私钥加密、公钥解密。但又因为非对称加密效率太低,所以私钥只加密原文的摘要,这样运算量就小的多,而且得到的数字签名也很小,方便保管和传输。

  • 数字证书和CA: 因为公钥是任何人都可以发布的,所以我们需要引入第三方来保证公钥的可信度,这个“第三方”就是我们常说的 CA(Certificate Authority,证书认证机构),CA 对公钥的签名认证也是有格式的,要包含公钥的序列号、用途、颁发者、有效时间等等,把这些打成一个包再签名,完整地证明公钥关联的各种信息,形成“数字证书”(Certificate)。

  • 小一点的 CA 可以让大 CA 签名认证,但链条的最后,也就是 Root CA,就只能自己证明自己了,这个就叫“自签名证书”(Self-Signed Certificate)或者“根证书”(Root Certificate)。你必须相信,否则整个证书信任链就走不下去了。

HTTP2

http2与http1.1有什么改进?

  1. 二进制分帧
  2. 请求多路复用 (Stream/Frame)
  3. 头部压缩: (HPack),其中原理是哈夫曼编码及索引表
  4. 服务端推送: (Server Push)

http2 中 Stream 与 Frame 是什么关系?

  • Stream 为 Request/Response 报文的双向通道,一个完整资源的请求与相应是一个 stream,特殊的 stream 作为 Settings、Window_Update 等 Frame 发送的通道
  • Frame 为 http2 通信的最小单位,有 Data、Headers 等,一个 Stream 包含多个 Frame,如一条 http 请求包含 Header、Data Frame 等

HTTP3

http3 基于 UDP 协议,这是与以前版本的 http 最大的不同,可以解决 http2 TCP 连接阻塞的问题。

  • Copyrights © 2019-2024 Hxy
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信