@marcel91200 / caddy Mirror · read-only / commits / c6673ad4
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 12, 14:30 UTC

staticresp: Use the evaluated response body for sniffing JSON content-type (#6249)

Mohammed Al Sahaf committed Apr 18, 2024 at 23:31 UTC c6673ad4d8c3253179d697f06aac458e48e56546
2 files changed +29 -1
caddytest/integration/handler_test.go
+28
@@ -1,6 +1,7 @@
1 package integration
2
3 import (
4 + "bytes"
5 "net/http"
6 "testing"
7
@@ -29,3 +30,30 @@ func TestBrowse(t *testing.T) {
30 }
31 tester.AssertResponseCode(req, 200)
32 }
33 +
34 +func TestRespondWithJSON(t *testing.T) {
35 + tester := caddytest.NewTester(t)
36 + tester.InitServer(`
37 + {
38 + skip_install_trust
39 + admin localhost:2999
40 + http_port 9080
41 + https_port 9443
42 + grace_period 1ns
43 + }
44 + localhost {
45 + respond {http.request.body}
46 + }
47 + `, "caddyfile")
48 +
49 + res, _ := tester.AssertPostResponseBody("https://localhost:9443/",
50 + nil,
51 + bytes.NewBufferString(`{
52 + "greeting": "Hello, world!"
53 + }`), 200, `{
54 + "greeting": "Hello, world!"
55 + }`)
56 + if res.Header.Get("Content-Type") != "application/json" {
57 + t.Errorf("expected Content-Type to be application/json, but was %s", res.Header.Get("Content-Type"))
58 + }
59 +}
modules/caddyhttp/staticresp.go
+1 -1
@@ -206,7 +206,7 @@ func (s StaticResponse) ServeHTTP(w http.ResponseWriter, r *http.Request, next H
206 // or for clients to render JSON properly which is very common)
207 body := repl.ReplaceKnown(s.Body, "")
208 if body != "" && w.Header().Get("Content-Type") == "" {
209 - content := strings.TrimSpace(s.Body)
209 + content := strings.TrimSpace(body)
210 if len(content) > 2 &&
211 (content[0] == '{' && content[len(content)-1] == '}' ||
212 (content[0] == '[' && content[len(content)-1] == ']')) &&