Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var DefaultRequestCacheKeyGenerator = func(r *http.Request) string { switch r.Method { case http.MethodGet, http.MethodHead: default: return "" } if strings.EqualFold(r.Header.Get("Cache-Control"), "no-Cache") { return "" } if r.RequestURI != "" { return fmt.Sprintf("%s:%s:%s", r.Method, r.Host, r.RequestURI) } else { return fmt.Sprintf("%s:%s", r.Method, r.URL.String()) } }
DefaultRequestCacheKeyGenerator 默认的http.Request缓存key生成器。可覆盖。
Functions ¶
func NewCacheMiddleware ¶
func NewCacheMiddleware( storage restcache.Storage, ttlRange [2]time.Duration, keyGenerator RequestCacheKeyGenerator, ) func(next http.HandlerFunc) http.HandlerFunc
NewCacheMiddleware 创建http.Handler的缓存中间件。 storage 为缓存存储器。 ttlRange 为缓存生存时间区间。 keyGenerator 为缓存key生成器。默认为:DefaultRequestCacheKeyGenerator。 支持简单的常用的HTTP缓存控制。
Example ¶
storage := lrucache.NewLRUCache(100, 10)
ttlRange := [2]time.Duration{time.Minute * 4, time.Minute * 6}
middleware := NewCacheMiddleware(storage, ttlRange, nil)
s := httptest.NewServer(http.HandlerFunc(middleware(func(w http.ResponseWriter, r *http.Request) {
requestURI := r.RequestURI
name := r.URL.Query().Get("name")
fmt.Printf("Received request. RequestURI: %s, Name: %s\n\n", requestURI, name)
w.Header().Add("Name", name)
w.Header().Add("RequestURI", requestURI)
w.WriteHeader(http.StatusOK)
w.Write([]byte("Hi, " + name))
})))
defer s.Close()
client := s.Client()
get := func(url string) {
resp, err := client.Get(url)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
defer resp.Body.Close()
fmt.Println("RequestURI:", resp.Header.Get("RequestURI"))
fmt.Println("Name:", resp.Header.Get("Name"))
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println("Body:", string(data))
fmt.Println()
}
get(s.URL + "/echo?name=Tom")
get(s.URL + "/echo?name=Tom")
get(s.URL + "/echo?name=Jerry")
Output: Received request. RequestURI: /echo?name=Tom, Name: Tom RequestURI: /echo?name=Tom Name: Tom Body: Hi, Tom RequestURI: /echo?name=Tom Name: Tom Body: Hi, Tom Received request. RequestURI: /echo?name=Jerry, Name: Jerry RequestURI: /echo?name=Jerry Name: Jerry Body: Hi, Jerry
Types ¶
type RequestCacheKeyGenerator ¶
RequestCacheKeyGenerator 根据http.Request生成缓存key。如果返回空字符串,表示不使用缓存。
Click to show internal directories.
Click to hide internal directories.