Browse Source

Add cache control

DarthSim 8 years ago
parent
commit
4773874fcd
2 changed files with 11 additions and 0 deletions
  1. 9 0
      config.go
  2. 2 0
      server.go

+ 9 - 0
config.go

@@ -63,6 +63,8 @@ type config struct {
 	ReadTimeout  int
 	WriteTimeout int
 
+	TTL int
+
 	MaxSrcDimension int
 
 	Quality         int
@@ -78,6 +80,7 @@ var conf = config{
 	Bind:            ":8080",
 	ReadTimeout:     10,
 	WriteTimeout:    10,
+	TTL:             3600,
 	MaxSrcDimension: 4096,
 	Quality:         80,
 	GZipCompression: 5,
@@ -92,6 +95,8 @@ func init() {
 	intEnvConfig(&conf.ReadTimeout, "IMGPROXY_READ_TIMEOUT")
 	intEnvConfig(&conf.WriteTimeout, "IMGPROXY_WRITE_TIMEOUT")
 
+	intEnvConfig(&conf.TTL, "IMGPROXY_TTL")
+
 	intEnvConfig(&conf.MaxSrcDimension, "IMGPROXY_MAX_SRC_DIMENSION")
 
 	intEnvConfig(&conf.Quality, "IMGPROXY_QUALITY")
@@ -124,6 +129,10 @@ func init() {
 		log.Fatalf("Write timeout should be greater than 0, now - %d\n", conf.WriteTimeout)
 	}
 
+	if conf.TTL <= 0 {
+		log.Fatalf("TTL should be greater than 0, now - %d\n", conf.TTL)
+	}
+
 	if conf.MaxSrcDimension <= 0 {
 		log.Fatalf("Max src dimension should be greater than 0, now - %d\n", conf.MaxSrcDimension)
 	}

+ 2 - 0
server.go

@@ -93,6 +93,8 @@ func logResponse(status int, msg string) {
 func respondWithImage(r *http.Request, rw http.ResponseWriter, data []byte, imgURL string, po processingOptions, startTime time.Time) {
 	gzipped := strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") && conf.GZipCompression > 0
 
+	rw.Header().Set("Expires", time.Now().Add(time.Second*time.Duration(conf.TTL)).Format(http.TimeFormat))
+	rw.Header().Set("Cache-Control", fmt.Sprintf("Cache-Control: max-age=%d", conf.TTL))
 	rw.Header().Set("Content-Type", imageContentType(data))
 	if gzipped {
 		rw.Header().Set("Content-Encoding", "gzip")