stdmiddlewares

package
v0.0.0-...-e2a80a6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2023 License: BSD-3-Clause Imports: 9 Imported by: 0

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

type RequestCacheKeyGenerator func(r *http.Request) string

RequestCacheKeyGenerator 根据http.Request生成缓存key。如果返回空字符串,表示不使用缓存。

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL