转转转后端

文章发布时间:

最后更新时间:

转转转后端!

强制缓存和协商缓存

https://xiaolincoding.com/network/2_http/http_interview.html#%E4%BB%80%E4%B9%88%E6%98%AF%E5%BC%BA%E5%88%B6%E7%BC%93%E5%AD%98

强制缓存由浏览器主导,在一定时间内(Cache-Control)不找后端

协商缓存用 Last-Modified/If-Modified-Since, ETag/If-None-Match 来(后端)判断是否修改过,如果没修改过返回304

Go 静态服务 http.FileServer 使用 Last-Modified(文件系统元数据),hash运算开销太大

手写 ETag,把要发的data做md5 hash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func GetData(c *gin.Context) {
// 强制缓存
c.Header("Cache-Control", "public, max-age=3600")

// 协商缓存 (手动实现)
data := getData()
etag := generateETag(data)

if match := c.GetHeader("If-None-Match"); match == etag {
c.Status(http.StatusNotModified)
return
}

c.Header("ETag", etag)
c.JSON(http.StatusOK, data)
}

HTTPS (SSL/TLS)

登录&https 加密 在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,HTTPS 在 TCP 三次握手之后,还需 SSL/TLS 的握手 机密性:非对称加密获得会话密钥,对称加密传输数据

认证 确保公钥的身份

HTTP/2

  • 头部压缩
  • 二进制格式
  • 并发传输:同一个tcp连接里的不同http请求可以并发,用 stream ID 识别
  • 服务器主动推送资源 双方都可以建立 stream,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。

HTTP/3 QUIC

 QUIC 是一个在 UDP 之上的 TCP + TLS + HTTP/2 的多路复用的协议 - 无队头阻塞:实现每个stream相互独立的TCP的rdt,减少队头阻塞 - 更快的连接建立:把tcp连接和tls连接合在一起 - 连接迁移:不像 TCP的源ip+端口 & 目标ip+端口 来标识每一个tcp连接,而是让进程创建唯一标识,来防止ip改变而引起的