diff --git a/server/gitea/client.go b/server/gitea/client.go index 5410413..7b5d009 100644 --- a/server/gitea/client.go +++ b/server/gitea/client.go @@ -25,6 +25,7 @@ type Client struct { type FileResponse struct { Exists bool + ETag []byte MimeType string Body []byte } diff --git a/server/upstream/upstream.go b/server/upstream/upstream.go index da97021..7c9a035 100644 --- a/server/upstream/upstream.go +++ b/server/upstream/upstream.go @@ -161,6 +161,14 @@ func (o *Options) Upstream(ctx *fasthttp.RequestCtx, giteaClient *gitea.Client, mimeType := o.getMimeTypeByExtension() ctx.Response.Header.SetContentType(mimeType) + // Set ETag + if cachedResponse.Exists { + ctx.Response.Header.SetBytesV(fasthttp.HeaderETag, cachedResponse.ETag) + } else if res != nil { + cachedResponse.ETag = res.Header.Peek(fasthttp.HeaderETag) + ctx.Response.Header.SetBytesV(fasthttp.HeaderETag, cachedResponse.ETag) + } + if ctx.Response.StatusCode() != fasthttp.StatusNotFound { // Everything's okay so far ctx.Response.SetStatusCode(fasthttp.StatusOK)