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] == ']')) &&