diff --git a/router.go b/router.go index fec4b2f..e61fbae 100644 --- a/router.go +++ b/router.go @@ -107,8 +107,6 @@ func convert(c *fiber.Ctx) error { c.Set("Content-Type", "image/avif") } - etag := genEtag(finalFileName) - c.Set("ETag", etag) c.Set("X-Compression-Rate", getCompressionRate(rawImageAbs, finalFileName)) return c.SendFile(finalFileName) } diff --git a/router_test.go b/router_test.go index 8f2a261..8892204 100644 --- a/router_test.go +++ b/router_test.go @@ -8,6 +8,7 @@ import ( "testing" "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/etag" "github.com/stretchr/testify/assert" ) @@ -31,9 +32,17 @@ func setupParam() { } func requestToServer(url string, app *fiber.App, ua, accept string) (*http.Response, []byte) { + headers := make(map[string]string) + headers["User-Agent"] = ua + headers["Accept"] = accept + return requestToServerHeaders(url, app, headers) +} + +func requestToServerHeaders(url string, app *fiber.App, headers map[string]string) (*http.Response, []byte) { req := httptest.NewRequest("GET", url, nil) - req.Header.Set("User-Agent", ua) - req.Header.Set("Accept", accept) + for header, value := range headers { + req.Header.Set(header, value) + } resp, err := app.Test(req, 120000) if err != nil { return nil, nil @@ -42,9 +51,13 @@ func requestToServer(url string, app *fiber.App, ua, accept string) (*http.Respo return resp, data } + func TestServerHeaders(t *testing.T) { setupParam() var app = fiber.New() + app.Use(etag.New(etag.Config{ + Weak: true, + })) app.Get("/*", convert) url := "http://127.0.0.1:3333/webp_server.bmp" @@ -53,17 +66,42 @@ func TestServerHeaders(t *testing.T) { defer response.Body.Close() ratio := response.Header.Get("X-Compression-Rate") etag := response.Header.Get("Etag") + lastModified := response.Header.Get("Last-Modified") assert.NotEqual(t, "", ratio) assert.NotEqual(t, "", etag) + assert.NotEqual(t, "", lastModified) + + // TestServerHeadersNotModified + var headers = map[string]string{ + "User-Agent": chromeUA, + "Accept": acceptWebP, + "If-None-Match": etag, + } + response, _ = requestToServerHeaders(url, app, headers) + defer response.Body.Close() + assert.Equal(t, 304, response.StatusCode) + + headers["If-Modified-Since"] = lastModified + response, _ = requestToServerHeaders(url, app, headers) + defer response.Body.Close() + assert.Equal(t, 304, response.StatusCode) + + headers["If-None-Match"] = "" + headers["If-Modified-Since"] = lastModified + response, _ = requestToServerHeaders(url, app, headers) + defer response.Body.Close() + assert.Equal(t, 304, response.StatusCode) // test for safari response, _ = requestToServer(url, app, safariUA, acceptLegacy) defer response.Body.Close() // ratio = response.Header.Get("X-Compression-Rate") etag = response.Header.Get("Etag") + lastModified = response.Header.Get("Last-Modified") assert.NotEqual(t, "", etag) + assert.NotEqual(t, "", lastModified) } func TestConvert(t *testing.T) { diff --git a/webp-server.go b/webp-server.go index d42aa51..e4a1fa1 100644 --- a/webp-server.go +++ b/webp-server.go @@ -10,6 +10,7 @@ import ( "github.com/davidbyttow/govips/v2/vips" "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/etag" "github.com/gofiber/fiber/v2/middleware/logger" log "github.com/sirupsen/logrus" ) @@ -111,6 +112,9 @@ Develop by WebP Server team. https://github.com/webp-sh`, version) ServerHeader: "Webp Server Go", DisableStartupMessage: true, }) + app.Use(etag.New(etag.Config{ + Weak: true, + })) app.Use(logger.New()) listenAddress := config.Host + ":" + config.Port