RequestHeader support set no default ContentType (#1218)

This commit is contained in:
Jack.Ju
2022-02-16 22:52:18 +08:00
committed by GitHub
parent c94581c005
commit ad8a07a86e
2 changed files with 38 additions and 4 deletions
+11 -4
View File
@@ -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 {
+27
View File
@@ -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()