要求重新導向與 REST API - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

要求重新導向與 REST API

本節描述如何使用 Amazon S3 REST API 處理 HTTP 重新導向。如需 Amazon S3 重新導向的一般資訊,請參閱《Amazon Simple Storage Service API 參考》中的「提出要求」。

重新導向與 HTTP 使用者代理程式

使用 Amazon S3 REST API 的程式應該會在應用程式層級或 HTTP 層級處理重新導向。許多 HTTP 用戶端程式庫與使用者代理程式會自動設定以正確處理重新導向;不過,還有許多其他重新導向實作不正確或不完整。

在您依賴程式庫完成重新導向需求之前,請測試下列案例:

  • 確認包含在重新導向要求 (收到重新導向後的第二個要求) 中的所有 HTTP 要求標頭正確,包括 Authorization 與 Date 等 HTTP 標準。

  • 確認非 GET 重新導向 (例如 PUT 與 DELETE) 運作正常。

  • 確認大型 PUT 要求正確遵循重新導向。

  • 如果 100-continue 回應花很長的時間抵達,請確認 PUT 要求正確遵循重新導向。

當 HTTP 要求方法不是 GET 或 HEAD 時,嚴格遵守 RFC 2616 的 HTTP 使用者代理程式可能需要明確確認,才能遵循重新導向。遵循由 Amazon S3 自動產生的重新導向通常很安全,因為系統只會對 amazonaws.com 網域中的主機發出重新導向,因此重新導向請求的效果會與原始請求相同。

重新導向與 100-Continue

為簡化重新導向處理、提高效率,並避免與傳送重新導向要求本文兩次相關聯的成本,請設定您的應用程式,使用 100-continue 進行 PUT 操作。當您的應用程式使用 100-continue 時,只有在收到確認才會傳送要求本文。如果根據標頭拒絕了訊息,則不會傳送訊息本文。如需 100-continue 的詳細資訊,請前往 RFC 2616 第 8.2.3 節

注意

根據 RFC 2616,對不明 HTTP 伺服器使用 Expect: Continue 時,您應該不會無限期地等候傳送要求本文。這是因為雖然某些 HTTP 伺服器無法識別 100-continue,但 Amazon S3 會識別您的請求是否包含 Expect: Continue,並回應暫時性 100-continue 狀態或最終狀態碼。此外,收到暫時性 100 continue go-ahead 之後,不會發生重新導向錯誤。這有助於您避免仍在撰寫要求本文時收到重新導向回應。

重新導向範例

本節提供使用 HTTP 重新導向與 100-continue 的主從互動範例。

以下為 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-continue,指出用戶端應該繼續傳送請求本文。

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