mirror of
https://github.com/woodchen-ink/webp_server_go.git
synced 2025-07-18 13:42:02 +08:00
Implement fiber etag middleware to replace etag generation (#218)
This commit is contained in:
parent
c61ed7da6b
commit
c66fccfffd
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user