diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go index f3b34fa4d..5ff98e022 100644 --- a/weed/s3api/s3api_object_handlers.go +++ b/weed/s3api/s3api_object_handlers.go @@ -388,6 +388,18 @@ func (s3a *S3ApiServer) proxyToFiler(w http.ResponseWriter, r *http.Request, des } } + if resp.StatusCode == http.StatusNotFound { + s3err.WriteErrorResponse(w, r, s3err.ErrNoSuchKey) + return + } + + // when HEAD a directory, it should be reported as no such key + // https://github.com/seaweedfs/seaweedfs/issues/3457 + if resp.ContentLength == -1 && resp.StatusCode != http.StatusNotModified { + s3err.WriteErrorResponse(w, r, s3err.ErrNoSuchKey) + return + } + responseStatusCode := responseFn(resp, w) s3err.PostLog(r, responseStatusCode, s3err.ErrNone) }