Skip to content

Commit

Permalink
RequestHeader support set no default ContentType (#1218)
Browse files Browse the repository at this point in the history
  • Loading branch information
j40951 committed Feb 16, 2022
1 parent c94581c commit ad8a07a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 4 deletions.
15 changes: 11 additions & 4 deletions header.go
Expand Up @@ -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.
Expand Down Expand Up @@ -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()
}

Expand Down Expand Up @@ -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 {
Expand Down
27 changes: 27 additions & 0 deletions header_test.go
Expand Up @@ -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()

Expand Down

0 comments on commit ad8a07a

Please sign in to comment.