Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
package middleware |
|
|
|
// Ported from Goji's middleware, source: |
|
// https://github.com/zenazn/goji/tree/master/web/middleware |
|
|
|
import ( |
|
"net/http" |
|
"time" |
|
) |
|
|
|
// Unix epoch time |
|
var epoch = time.Unix(0, 0).Format(time.RFC1123) |
|
|
|
// Taken from https://github.com/mytrile/nocache |
|
var noCacheHeaders = map[string]string{ |
|
"Expires": epoch, |
|
"Cache-Control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", |
|
"Pragma": "no-cache", |
|
"X-Accel-Expires": "0", |
|
} |
|
|
|
var etagHeaders = []string{ |
|
"ETag", |
|
"If-Modified-Since", |
|
"If-Match", |
|
"If-None-Match", |
|
"If-Range", |
|
"If-Unmodified-Since", |
|
} |
|
|
|
// NoCache is a simple piece of middleware that sets a number of HTTP headers to prevent |
|
// a router (or subrouter) from being cached by an upstream proxy and/or client. |
|
// |
|
// As per http://wiki.nginx.org/HttpProxyModule - NoCache sets: |
|
// Expires: Thu, 01 Jan 1970 00:00:00 UTC |
|
// Cache-Control: no-cache, private, max-age=0 |
|
// X-Accel-Expires: 0 |
|
// Pragma: no-cache (for HTTP/1.0 proxies/clients) |
|
func NoCache(h http.Handler) http.Handler { |
|
fn := func(w http.ResponseWriter, r *http.Request) { |
|
|
|
// Delete any ETag headers that may have been set |
|
for _, v := range etagHeaders { |
|
if r.Header.Get(v) != "" { |
|
r.Header.Del(v) |
|
} |
|
} |
|
|
|
// Set our NoCache headers |
|
for k, v := range noCacheHeaders { |
|
w.Header().Set(k, v) |
|
} |
|
|
|
h.ServeHTTP(w, r) |
|
} |
|
|
|
return http.HandlerFunc(fn) |
|
}
|
|
|