From ad8a07a86e131fc65a3f6a0f88583badf20a6e88 Mon Sep 17 00:00:00 2001 From: "Jack.Ju" Date: Wed, 16 Feb 2022 22:52:18 +0800 Subject: [PATCH] RequestHeader support set no default ContentType (#1218) --- header.go | 15 +++++++++++---- header_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/header.go b/header.go index 123fe95..e74bbc3 100644 --- a/header.go +++ b/header.go @@ -59,9 +59,10 @@ type ResponseHeader struct { type RequestHeader struct { noCopy noCopy //nolint:unused,structcheck - disableNormalizing bool - noHTTP11 bool - connectionClose bool + disableNormalizing bool + noHTTP11 bool + connectionClose bool + noDefaultContentType bool // These two fields have been moved close to other bool fields // for reducing RequestHeader object size. @@ -943,9 +944,15 @@ func (h *ResponseHeader) resetSkipNormalize() { h.trailer = h.trailer[:0] } +// SetNoDefaultContentType allows you to control if a default Content-Type header will be set (false) or not (true). +func (h *RequestHeader) SetNoDefaultContentType(noDefaultContentType bool) { + h.noDefaultContentType = noDefaultContentType +} + // Reset clears request header. func (h *RequestHeader) Reset() { h.disableNormalizing = false + h.SetNoDefaultContentType(false) h.resetSkipNormalize() } @@ -2273,7 +2280,7 @@ func (h *RequestHeader) AppendBytes(dst []byte) []byte { } contentType := h.ContentType() - if len(contentType) == 0 && !h.ignoreBody() { + if !h.noDefaultContentType && len(contentType) == 0 && !h.ignoreBody() { contentType = strDefaultContentType } if len(contentType) > 0 { diff --git a/header_test.go b/header_test.go index f041577..e313f49 100644 --- a/header_test.go +++ b/header_test.go @@ -1381,6 +1381,33 @@ func TestRequestContentTypeDefaultNotEmpty(t *testing.T) { } } +func TestRequestContentTypeNoDefault(t *testing.T) { + t.Parallel() + + var h RequestHeader + h.SetMethod(MethodDelete) + h.SetNoDefaultContentType(true) + + w := &bytes.Buffer{} + bw := bufio.NewWriter(w) + if err := h.Write(bw); err != nil { + t.Fatalf("Unexpected error: %s", err) + } + if err := bw.Flush(); err != nil { + t.Fatalf("Unexpected error: %s", err) + } + + var h1 RequestHeader + br := bufio.NewReader(w) + if err := h1.Read(br); err != nil { + t.Fatalf("Unexpected error: %s", err) + } + + if string(h1.contentType) != "" { + t.Fatalf("unexpected Content-Type %q. Expecting %q", h1.contentType, "") + } +} + func TestResponseDateNoDefaultNotEmpty(t *testing.T) { t.Parallel()