diff options
author | Mohammed Al Sahaf <[email protected]> | 2024-04-18 23:31:00 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2024-04-18 20:31:00 +0000 |
commit | c6673ad4d8c3253179d697f06aac458e48e56546 (patch) | |
tree | 45ee4638989a6e591c0d21d55d3d174f31013ea3 | |
parent | 9ab09433deba62f9f2b37d824570926f7ee69312 (diff) | |
download | caddy-c6673ad4d8c3253179d697f06aac458e48e56546.tar.gz caddy-c6673ad4d8c3253179d697f06aac458e48e56546.zip |
staticresp: Use the evaluated response body for sniffing JSON content-type (#6249)
-rw-r--r-- | caddytest/integration/handler_test.go | 28 | ||||
-rw-r--r-- | modules/caddyhttp/staticresp.go | 2 |
2 files changed, 29 insertions, 1 deletions
diff --git a/caddytest/integration/handler_test.go b/caddytest/integration/handler_test.go index 6db119eae..afc700b02 100644 --- a/caddytest/integration/handler_test.go +++ b/caddytest/integration/handler_test.go @@ -1,6 +1,7 @@ package integration import ( + "bytes" "net/http" "testing" @@ -29,3 +30,30 @@ func TestBrowse(t *testing.T) { } tester.AssertResponseCode(req, 200) } + +func TestRespondWithJSON(t *testing.T) { + tester := caddytest.NewTester(t) + tester.InitServer(` + { + skip_install_trust + admin localhost:2999 + http_port 9080 + https_port 9443 + grace_period 1ns + } + localhost { + respond {http.request.body} + } + `, "caddyfile") + + res, _ := tester.AssertPostResponseBody("https://localhost:9443/", + nil, + bytes.NewBufferString(`{ + "greeting": "Hello, world!" + }`), 200, `{ + "greeting": "Hello, world!" + }`) + if res.Header.Get("Content-Type") != "application/json" { + t.Errorf("expected Content-Type to be application/json, but was %s", res.Header.Get("Content-Type")) + } +} diff --git a/modules/caddyhttp/staticresp.go b/modules/caddyhttp/staticresp.go index 3ec76f29f..1fea6978f 100644 --- a/modules/caddyhttp/staticresp.go +++ b/modules/caddyhttp/staticresp.go @@ -206,7 +206,7 @@ func (s StaticResponse) ServeHTTP(w http.ResponseWriter, r *http.Request, next H // or for clients to render JSON properly which is very common) body := repl.ReplaceKnown(s.Body, "") if body != "" && w.Header().Get("Content-Type") == "" { - content := strings.TrimSpace(s.Body) + content := strings.TrimSpace(body) if len(content) > 2 && (content[0] == '{' && content[len(content)-1] == '}' || (content[0] == '[' && content[len(content)-1] == ']')) && |