diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java index ae75bf1..a7d8853 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java @@ -476,6 +476,34 @@ public class S3ProxyHandler { path[i] = URLDecoder.decode(path[i], StandardCharsets.UTF_8); } + for (String parameter : Collections.list( + request.getParameterNames())) { + if (UNSUPPORTED_PARAMETERS.contains(parameter)) { + logger.error("Unknown parameters {} with URI {}", + parameter, request.getRequestURI()); + throw new S3Exception(S3ErrorCode.NOT_IMPLEMENTED); + } + } + + // emit NotImplemented for unknown x-amz- headers + for (String headerName : Collections.list(request.getHeaderNames())) { + headerName = headerName.toLowerCase(); + if (ignoreUnknownHeaders) { + continue; + } + if (!headerName.startsWith("x-amz-")) { + continue; + } + if (headerName.startsWith(USER_METADATA_PREFIX)) { + continue; + } + if (!SUPPORTED_X_AMZ_HEADERS.contains(headerName)) { + logger.error("Unknown header {} with URI {}", + headerName, request.getRequestURI()); + throw new S3Exception(S3ErrorCode.NOT_IMPLEMENTED); + } + } + Map.Entry provider = blobStoreLocator.locateBlobStore( requestIdentity, path.length > 1 ? path[1] : null, @@ -620,33 +648,6 @@ public class S3ProxyHandler { } } - for (String parameter : Collections.list( - request.getParameterNames())) { - if (UNSUPPORTED_PARAMETERS.contains(parameter)) { - logger.error("Unknown parameters {} with URI {}", - parameter, request.getRequestURI()); - throw new S3Exception(S3ErrorCode.NOT_IMPLEMENTED); - } - } - - // emit NotImplemented for unknown x-amz- headers - for (String headerName : Collections.list(request.getHeaderNames())) { - if (ignoreUnknownHeaders) { - continue; - } - if (!headerName.startsWith("x-amz-")) { - continue; - } - if (headerName.startsWith(USER_METADATA_PREFIX)) { - continue; - } - if (!SUPPORTED_X_AMZ_HEADERS.contains(headerName.toLowerCase())) { - logger.error("Unknown header {} with URI {}", - headerName, request.getRequestURI()); - throw new S3Exception(S3ErrorCode.NOT_IMPLEMENTED); - } - } - // Validate container name if (!uri.equals("/") && !isValidContainer(path[1])) { if (method.equals("PUT") &&