Переглянути джерело

Set proper ContentLength for 404 responses in FS transport

DarthSim 3 роки тому
батько
коміт
d5a62defba
1 змінених файлів з 16 додано та 26 видалено
  1. 16 26
      transport/fs/fs.go

+ 16 - 26
transport/fs/fs.go

@@ -27,19 +27,7 @@ func (t transport) RoundTrip(req *http.Request) (resp *http.Response, err error)
 	f, err := t.fs.Open(req.URL.Path)
 	if err != nil {
 		if os.IsNotExist(err) {
-			return &http.Response{
-				StatusCode:    http.StatusNotFound,
-				Proto:         "HTTP/1.0",
-				ProtoMajor:    1,
-				ProtoMinor:    0,
-				Header:        header,
-				ContentLength: 0,
-				Body: io.NopCloser(strings.NewReader(
-					fmt.Sprintf("%s doesn't exist", req.URL.Path),
-				)),
-				Close:   false,
-				Request: req,
-			}, nil
+			return respNotFound(req, fmt.Sprintf("%s doesn't exist", req.URL.Path)), nil
 		}
 		return nil, err
 	}
@@ -50,19 +38,7 @@ func (t transport) RoundTrip(req *http.Request) (resp *http.Response, err error)
 	}
 
 	if fi.IsDir() {
-		return &http.Response{
-			StatusCode:    http.StatusNotFound,
-			Proto:         "HTTP/1.0",
-			ProtoMajor:    1,
-			ProtoMinor:    0,
-			Header:        header,
-			ContentLength: 0,
-			Body: io.NopCloser(strings.NewReader(
-				fmt.Sprintf("%s is directory", req.URL.Path),
-			)),
-			Close:   false,
-			Request: req,
-		}, nil
+		return respNotFound(req, fmt.Sprintf("%s is directory", req.URL.Path)), nil
 	}
 
 	if config.ETagEnabled {
@@ -105,3 +81,17 @@ func BuildEtag(path string, fi fs.FileInfo) string {
 	hash := md5.Sum([]byte(tag))
 	return `"` + string(base64.RawURLEncoding.EncodeToString(hash[:])) + `"`
 }
+
+func respNotFound(req *http.Request, msg string) *http.Response {
+	return &http.Response{
+		StatusCode:    http.StatusNotFound,
+		Proto:         "HTTP/1.0",
+		ProtoMajor:    1,
+		ProtoMinor:    0,
+		Header:        make(http.Header),
+		ContentLength: int64(len(msg)),
+		Body:          io.NopCloser(strings.NewReader(msg)),
+		Close:         false,
+		Request:       req,
+	}
+}