Implement fiber etag middleware to replace etag generation (#218)

This commit is contained in:
BugFest 2023-05-29 08:55:11 +02:00 committed by GitHub
parent c61ed7da6b
commit c66fccfffd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 4 deletions

View File

@ -107,8 +107,6 @@ func convert(c *fiber.Ctx) error {
c.Set("Content-Type", "image/avif") c.Set("Content-Type", "image/avif")
} }
etag := genEtag(finalFileName)
c.Set("ETag", etag)
c.Set("X-Compression-Rate", getCompressionRate(rawImageAbs, finalFileName)) c.Set("X-Compression-Rate", getCompressionRate(rawImageAbs, finalFileName))
return c.SendFile(finalFileName) return c.SendFile(finalFileName)
} }

View File

@ -8,6 +8,7 @@ import (
"testing" "testing"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/etag"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@ -31,9 +32,17 @@ func setupParam() {
} }
func requestToServer(url string, app *fiber.App, ua, accept string) (*http.Response, []byte) { 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 := httptest.NewRequest("GET", url, nil)
req.Header.Set("User-Agent", ua) for header, value := range headers {
req.Header.Set("Accept", accept) req.Header.Set(header, value)
}
resp, err := app.Test(req, 120000) resp, err := app.Test(req, 120000)
if err != nil { if err != nil {
return nil, nil return nil, nil
@ -42,9 +51,13 @@ func requestToServer(url string, app *fiber.App, ua, accept string) (*http.Respo
return resp, data return resp, data
} }
func TestServerHeaders(t *testing.T) { func TestServerHeaders(t *testing.T) {
setupParam() setupParam()
var app = fiber.New() var app = fiber.New()
app.Use(etag.New(etag.Config{
Weak: true,
}))
app.Get("/*", convert) app.Get("/*", convert)
url := "http://127.0.0.1:3333/webp_server.bmp" url := "http://127.0.0.1:3333/webp_server.bmp"
@ -53,17 +66,42 @@ func TestServerHeaders(t *testing.T) {
defer response.Body.Close() defer response.Body.Close()
ratio := response.Header.Get("X-Compression-Rate") ratio := response.Header.Get("X-Compression-Rate")
etag := response.Header.Get("Etag") etag := response.Header.Get("Etag")
lastModified := response.Header.Get("Last-Modified")
assert.NotEqual(t, "", ratio) assert.NotEqual(t, "", ratio)
assert.NotEqual(t, "", etag) 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 // test for safari
response, _ = requestToServer(url, app, safariUA, acceptLegacy) response, _ = requestToServer(url, app, safariUA, acceptLegacy)
defer response.Body.Close() defer response.Body.Close()
// ratio = response.Header.Get("X-Compression-Rate") // ratio = response.Header.Get("X-Compression-Rate")
etag = response.Header.Get("Etag") etag = response.Header.Get("Etag")
lastModified = response.Header.Get("Last-Modified")
assert.NotEqual(t, "", etag) assert.NotEqual(t, "", etag)
assert.NotEqual(t, "", lastModified)
} }
func TestConvert(t *testing.T) { func TestConvert(t *testing.T) {

View File

@ -10,6 +10,7 @@ import (
"github.com/davidbyttow/govips/v2/vips" "github.com/davidbyttow/govips/v2/vips"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/etag"
"github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/fiber/v2/middleware/logger"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@ -111,6 +112,9 @@ Develop by WebP Server team. https://github.com/webp-sh`, version)
ServerHeader: "Webp Server Go", ServerHeader: "Webp Server Go",
DisableStartupMessage: true, DisableStartupMessage: true,
}) })
app.Use(etag.New(etag.Config{
Weak: true,
}))
app.Use(logger.New()) app.Use(logger.New())
listenAddress := config.Host + ":" + config.Port listenAddress := config.Host + ":" + config.Port