在 gin 中实现首页不缓存

之前提到了在 nginx 中添加响应头 Cache-Control: no-cache 不缓存首页, 以便每次发布 CDN 都能回源到最新的资源。

nginx 的配置可能都是实施人员的操作, 或许不在掌控范围内。

自己控制起来很简单, 无非就是加一个 Header 头嘛。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

package main

import (
	"fmt"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	// 一定要放在最前面
	r.Use(noCacheIndex)

	r.Any("/", func(c *gin.Context) {
		c.String(200, "ok")
	})

	_ = r.Run(":8089")
}

func noCacheIndex(c *gin.Context) {
	path := c.Request.URL.Path
	// fmt.Println("path=", path)
	if path == "/" || path == "/index.html" {
		c.Header("Cache-Control", "no-cache")
	}
}

结果如预期

1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: text/plain; charset=utf-8
Date: Fri, 26 Nov 2021 02:50:50 GMT
Content-Length: 2
Connection: close

ok