Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

请求重定向和 REST API

概述

Amazon S3 使用域名系统 (DNS) 将请求路由到可以处理它们的设备。这个系统非常有效。但是,可能会发生临时路由错误。

如果请求进入错误的 Amazon S3 位置,Amazon S3 将使用临时重定向进行响应,以告知请求者将请求重新发送到新的终端节点。

如果请求的格式不正确,Amazon S3 将使用永久重定向来提供有关如何正确执行请求的说明。

重要

每个 Amazon S3 程序必须设计为可以处理重定向响应。唯一的例外是专用于存储桶 (在不使用 <CreateBucketConfiguration> 的情况下创建的) 的程序。有关位置约束的更多信息,请参阅 访问存储桶

DNS 路由选择

DNS 路由选择会将请求路由到合适的 Amazon S3 设备。

下图显示了 DNS 路由选择的示例。

1 客户端创建 DNS 请求来获取存储在 Amazon S3 上的对象。
2 客户端收到可以处理请求的设备的一个或多个 IP 地址。
3 客户端创建面向 Amazon S3 设备 B 的请求。
4 设备 B 将返回对象的副本。

临时请求重定向

临时重定向是一种错误响应类型,指示请求者应将其请求重新发送到其他终端节点。

由于 Amazon S3 的分布式特性,请求可能暂时会被路由到错误的设备。创建或删除存储桶后,很可能会立即发生此情况。例如,如果您创建新的存储桶并立即向该存储桶发送请求,则根据存储桶的位置约束,您可能收到临时重定向。如果您在美国东部 (弗吉尼亚北部) 区域 (s3.amazonaws.com 终端节点) 创建存储桶,则不会看到此重定向,因为这也是默认终端节点。但如果存储桶是在其他任何区域创建的,则对该存储桶的任何请求都会转到默认终端节点,同时会传播该存储桶的 DNS 条目。默认终端节点会将此请求重定向到具有 HTTP 302 响应的正确终端节点。

临时重定向包含指向正确设备的 URI,您可以使用它来立即重新发送请求。

重要

不要重新使用之前重定向响应提供的终端节点。它似乎能够正常工作 (甚至可以持续很长一段时间),但可能会产生不可预测的结果并且最终会在不另行通知的情况下导致失败。

下图显示了临时重定向的示例。

1 客户端创建 DNS 请求来获取存储在 Amazon S3 上的对象。
2 客户端收到可以处理请求的设备的一个或多个 IP 地址。
3 客户端创建面向 Amazon S3 设备 B 的请求。
4 设备 B 将返回一个重定向,指示可从位置 C 获取对象。
5 客户端会将请求重新发送到设备 C。
6 设备 C 将返回对象的副本。

永久请求重定向

永久重定向指示请求中资源的寻址不正确。例如,如果您使用路径类型请求来访问使用 <CreateBucketConfiguration> 创建的存储桶,将发生永久重定向。有关更多信息,请参阅 访问存储桶

为帮助您在开发期间查找这些错误,此类型的重定向不包含位置 HTTP 标头 (该标头允许您自动遵循请求,以定向到正确的位置)。参考生成的 XML 错误文档,获取有关使用正确的 Amazon S3 终端节点的帮助。

REST API 重定向

HTTP/1.1 307 Temporary Redirect Location: http://johnsmith.s3-gztb4pa9sq.amazonaws.com/photos/puppy.jpg?rk=e2c69a31 Content-Type: application/xml Transfer-Encoding: chunked Date: Fri, 12 Oct 2007 01:12:56 GMT Server: AmazonS3 <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>TemporaryRedirect</Code> <Message>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests.</Message> <Endpoint>johnsmith.s3-gztb4pa9sq.amazonaws.com</Endpoint> </Error>

SOAP API 重定向

注意

HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。对于 SOAP 将不支持新 Amazon S3 功能。我们建议您使用 REST API 或 AWS 开发工具包。

<soapenv:Body> <soapenv:Fault> <Faultcode>soapenv:Client.TemporaryRedirect</Faultcode> <Faultstring>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests.</Faultstring> <Detail> <Bucket>images</Bucket> <Endpoint>s3-gztb4pa9sq.amazonaws.com</Endpoint> </Detail> </soapenv:Fault> </soapenv:Body>