请求重定向和 REST API - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

请求重定向和 REST API

此部分介绍如何使用 Amazon S3 REST API 处理 HTTP 重定向。有关 Amazon S3 重定向的一般信息,请参阅《Amazon Simple Storage Service API 参考》中的提出请求

重定向和 HTTP 用户代理

使用 Amazon S3 REST API 的程序既可以处理应用程序层上的重定向,也可以处理 HTTP 层上的重定向。许多 HTTP 客户端库和用户代理经过配置可以自动正确处理重定向;然而,许多其他 HTTP 客户端库和用户代理的重定向实施会不正确或不完整。

在依赖库完成重定向要求之前,请测试以下案例:

  • 验证所有 HTTP 请求标头都已正确地包含在重定向的请求中 (收到重定向后的第二个请求),包括诸如授权和日期等 HTTP 标准。

  • 验证诸如 PUT 和 DELETE 等非 GET 的重定向运行正常。

  • 验证大型 PUT 请求正确地遵循了重定向。

  • 如果需要很长时间才能收到 100-继续响应,请验证 PUT 请求正确地遵循了重定向。

当 HTTP 请求方法不是 GET 或 HEAD 时,严格遵循 RFC 2616 的 HTTP 用户代理可能会在遵循重定向之前,请求显式确认。自动遵循 Amazon S3 生成的重定向通常是安全的,因为系统只会发出指向 amazonaws.com 域中主机的重定向,并且重定向请求的效果与原始请求的效果相同。

重定向和 100-继续

要简化重定向处理过程、提高工作效率以及避免重复支付与发送重定向请求正文相关的费用,请将您的应用程序配置为对 PUT 操作使用 100-继续。当应用程序使用 100-继续时,它不会发送请求正文,直到收到认可。如果根据标头拒绝了消息,则不会发送消息的正文。有关 100-继续的更多信息,请参阅 RFC 2616 Section 8.2.3

注意

根据 RFC 2616,在未知的 HTTP 服务器中使用 Expect: Continue 时,您应该直接发送请求正文,不要等待某个无限期的时段。这是因为某些 HTTP 服务器不能识别 100-继续。但是,Amazon S3 能够识别您的请求是否包含了 Expect: Continue,并且将使用临时的 100-继续状态或最终的状态代码进行响应。此外,收到临时的 100 继续操作指示后,不会发生重定向错误。这可以帮助您避免在编写请求正文时,收到重定向响应。

重定向示例

本节提供了使用 HTTP 重定向和 100-继续执行客户端和服务器交互的示例。

下面是用于 quotes.s3.amazonaws.com 存储桶的示例 PUT。

PUT /nelson.txt HTTP/1.1 Host: quotes.s3.amazonaws.com Date: Mon, 15 Oct 2007 22:18:46 +0000 Content-Length: 6 Expect: 100-continue

Amazon S3 将返回以下内容:

HTTP/1.1 307 Temporary Redirect Location: http://quotes.s3-4c25d83b.amazonaws.com/nelson.txt?rk=8d47490b Content-Type: application/xml Transfer-Encoding: chunked Date: Mon, 15 Oct 2007 22:18:46 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>quotes.s3-4c25d83b.amazonaws.com</Endpoint> <Bucket>quotes</Bucket> </Error>

客户端将遵循重定向响应并向 quotes.s3-4c25d83b.amazonaws.com 临时终端节点发布新的请求。

PUT /nelson.txt?rk=8d47490b HTTP/1.1 Host: quotes.s3-4c25d83b.amazonaws.com Date: Mon, 15 Oct 2007 22:18:46 +0000 Content-Length: 6 Expect: 100-continue

Amazon S3 将返回 100-继续,以指示客户端应继续发送请求正文。

HTTP/1.1 100 Continue

客户端将发送请求正文。

ha ha\n

Amazon S3 将返回最终响应。

HTTP/1.1 200 OK Date: Mon, 15 Oct 2007 22:18:48 GMT ETag: "a2c8d6b872054293afd41061e93bc289" Content-Length: 0 Server: AmazonS3