Amazon Simple Storage Service
开发人员指南 (API 版本 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 路由选择的示例。

 示意图:显示当 DNS 服务器将来自客户端的请求路由到设备 B 时发生的步骤。

DNS 路由请求步骤

  1. 客户端创建 DNS 请求来获取存储在 Amazon S3 上的对象。

  2. 客户端收到可以处理请求的设备的一个或多个 IP 地址。在本示例中,IP 地址用于设备 B。

  3. 客户端创建面向 Amazon S3 设备 B 的请求。

  4. 设备 B 将对象的副本返回给客户端。

临时请求重定向

临时重定向是一种错误响应类型,指示请求者应将请求重新发送到其他终端节点。由于 Amazon S3 的分布式特性,请求可能暂时会被路由到错误的设备。创建或删除存储桶后,很可能会立即发生此情况。

例如,如果您创建新的存储桶并立即向该存储桶发送请求,则根据存储桶的位置约束,您可能收到临时重定向。如果您在美国东部(弗吉尼亚北部) AWS 区域中创建了该存储桶,则看不到此重定向,因为这也是默认的 Amazon S3 终端节点。

但如果存储桶是在其他任何区域创建的,则对该存储桶的任何请求都会转到默认终端节点,同时会传播该存储桶的 DNS 条目。默认终端节点会将此请求重定向到具有 HTTP 302 响应的正确终端节点。临时重定向包含指向正确设备的 URI,您可以使用它来立即重新发送请求。

重要

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

下面的图和过程显示临时重定向的示例。

 示意图:显示当客户端向 B 发送请求但被重定向到 C 时发生的步骤。

临时请求重定向步骤

  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.cn/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.cn</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.cn</Endpoint> </Detail> </soapenv:Fault> </soapenv:Body>