Set proper ContentLength for 404 responses in FS transport

This commit is contained in:
DarthSim
2022-07-27 17:11:07 +06:00
parent 6cc887dfc4
commit d5a62defba

View File

@@ -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,
}
}