From a90608a712909991ad41912638f8c1fd0eacfd05 Mon Sep 17 00:00:00 2001 From: j00234709 Date: Wed, 16 Feb 2022 11:40:34 +0800 Subject: [PATCH] RequestHeader support set no default ContentType --- header.go | 15 +++++++++++---- header_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/header.go b/header.go index 123fe95f9b..e74bbc3c7f 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 f0415778a7..e313f496a6 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()