从S3找不到请求的对象时,返回默认对象,没有错误

时间:2015-02-15 06:42:50

标签: amazon-web-services amazon-s3

当找不到/可用请求的对象时,是否可以将S3存储桶配置为返回默认对象?我不想返回任何403或404错误。

1 个答案:

答案 0 :(得分:1)

[编辑反思以下评论]

在标准模式下,无法将Amazon S3配置为在请求的对象不可用时返回默认对象。

默认行为是在对象不存在时返回HTTP 403

# existing object
$ curl -I http://s3-eu-west-1.amazonaws.com/public-sst/wifi.jpg
HTTP/1.1 200 OK
x-amz-id-2: K8PxI6YUES0Ua2/rPaLwKhmhZv/lVMbWnvagmfQpzs2BI6NNyHplTB4ROaYvIXCWtE/S+xXIImk=
x-amz-request-id: 9853D002E3968F0D
Date: Mon, 16 Feb 2015 11:08:56 GMT
Last-Modified: Sun, 30 Nov 2014 21:15:06 GMT
ETag: "553353dcf5d98841970e95a6d1af0741"
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 113572
Server: AmazonS3

# non existing object
$ curl -I http://s3-eu-west-1.amazonaws.com/public-sst/wifi.png
HTTP/1.1 403 Forbidden
x-amz-request-id: F78E2F047DC09F00
x-amz-id-2: wydGOgs8aHMn1qc5MLbNjKGKyqshpBhA0kCgWX0zHUm0fXFRU7Z1eWdPKgtkv2ZVtPPhAqP+O+k=
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Mon, 16 Feb 2015 11:08:59 GMT
Server: AmazonS3

在网站托管模式下配置Amazon S3时(根据http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html),默认行为不同:

  • 当对象不可公开阅读时返回HTTP 403
  • 当对象或存储桶不存在或存储桶未配置为网站时,将返回HTTP 404。

可以将Web Hosting Mode中的Amazon S3配置为返回自定义错误页面,而不是Amazon S3生成的默认HTML HTTP 404错误。

由于最初的问题也提到了HTTP 403:没有办法,仅使用Amazon S3配置Amazon S3以在HTTP 403上返回自定义错误页面。详细信息位于http://docs.aws.amazon.com/AmazonS3/latest/dev/CustomErrorDocSupport.html

要在HTTP 403和404上返回自定义错误页面,您可以在Amazon S3存储桶前使用CloudFront。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesErrorPages

可以将Cloudfront配置为返回Amazon S3返回的任何HTTP 4xx或HTTP 5xx错误的自定义错误页面。

CloudFront分配无需额外费用,您只需为CloudFront带来的带宽付费。 CloudFront传出带宽比S3传出带宽($ 0.09 / Gb)成本更低($ 0.085 / Gb),因此使用CloudFront应该不费脑筋。