From 5411c96ef391e84cef358258272bf0e6fd406f59 Mon Sep 17 00:00:00 2001 From: 6543 <6543@noreply.codeberg.org> Date: Fri, 15 Jul 2022 21:06:05 +0200 Subject: [PATCH] Tell fasthttp to not set "Content-Length: 0" on non cached content (#107) fix #97 Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://codeberg.org/Codeberg/pages-server/pulls/107 --- integration/get_test.go | 2 ++ server/gitea/client.go | 1 - server/upstream/upstream.go | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/integration/get_test.go b/integration/get_test.go index 1997010..8af40f0 100644 --- a/integration/get_test.go +++ b/integration/get_test.go @@ -59,6 +59,8 @@ func TestGetContent(t *testing.T) { assert.EqualValues(t, "text/html; charset=utf-8", resp.Header.Get("Content-Type")) assert.True(t, getSize(resp.Body) > 100) assert.Len(t, resp.Header.Get("ETag"), 42) + + // TODO: test get of non cachable content (content size > fileCacheSizeLimit) } func TestCustomDomain(t *testing.T) { diff --git a/server/gitea/client.go b/server/gitea/client.go index 7b5d009..3b9ad6f 100644 --- a/server/gitea/client.go +++ b/server/gitea/client.go @@ -82,7 +82,6 @@ func (client *Client) ServeRawContent(uri string) (*fasthttp.Response, error) { if err != nil { return nil, err } - // resp.SetBodyStream(&strings.Reader{}, -1) if err != nil { return nil, err diff --git a/server/upstream/upstream.go b/server/upstream/upstream.go index 7c9a035..b9fc2bc 100644 --- a/server/upstream/upstream.go +++ b/server/upstream/upstream.go @@ -181,6 +181,9 @@ func (o *Options) Upstream(ctx *fasthttp.RequestCtx, giteaClient *gitea.Client, var cacheBodyWriter bytes.Buffer if res != nil { if res.Header.ContentLength() > fileCacheSizeLimit { + // fasthttp else will set "Content-Length: 0" + ctx.Response.SetBodyStream(&strings.Reader{}, -1) + err = res.BodyWriteTo(ctx.Response.BodyWriter()) } else { // TODO: cache is half-empty if request is cancelled - does the ctx.Err() below do the trick?