本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
要求路由
對使用 CreateBucket API (包含 CreateBucketConfiguration) 建立的儲存貯體提出請求的程式必須支援重新導向。此外,未採用 DNS TTL 的某些用戶端可能會遇到問題。
本節說明設計服務或應用程式以搭配 Amazon S3 使用時須考量的路由與 DNS 問題。
要求重新導向與 REST API
Amazon S3 會使用網域名稱系統 (DNS) 將請求路由到能夠處理請求的設備。此系統有效率執行作業,但是也可能會發生暫時性的路由錯誤。若請求抵達錯誤的 Amazon S3 位置,則 Amazon S3 會以暫時重新導向回應,指示申請者將請求重新傳送到新端點。若請求的格式錯誤,Amazon S3 會使用永久重新導向來指示如何正確執行請求。
重要
您必須擁有可以處理 Amazon S3 重新導向回應的應用程式,才可以使用此功能。此應用程式唯一的例外是專為不使用 <CreateBucketConfiguration>
建立儲存貯體。如需位置限制條件的詳細資訊,請參閱 存取及列出 Amazon S3 儲存貯體。
如果區域是在 2019 年 3 月 20 日後才推出,則當請求抵達錯誤的 Amazon S3 位置時,Amazon S3 會傳回「HTTP 400 錯誤的請求」錯誤。
如需啟用或停用 AWS 區域的詳細資訊,請參閱《AWS 一般參考》中的 AWS 區域 與端點。
DNS 路由
DNS 路由會將請求路由到合適的 Amazon S3 設備。下圖範例顯示 DNS 路由過程。
![顯示 DNS 伺服器將請求從用戶端路由到 B 設施時所發生步驟的圖表,](images/DNS_virthost.png)
DNS 路由要求步驟
-
用戶端提出 DNS 請求,以取得存放在 Amazon S3 上的物件。
-
用戶端收到一或多個可處理要求的設備 IP 位址。在此範例中,IP 地址為 B 設施。
-
用戶端向 Amazon S3 設備 B 提出請求。
-
設備 B 傳回物件的複本至客戶端。
暫時要求重新導向
暫時性重新導向是一種錯誤回應,會向申請者發出訊息,要求其必須將要求重新傳送至其他端點。Amazon S3 的分散特性可能會使請求暫時路由至錯誤的設備。這是相當少見的情況,最可能在建立儲存貯體之後立即發生。
例如,若您在建立新儲存貯體後立即向儲存貯體提出要求,就可能會收到暫時性重新導向,這會視儲存貯體的位置限制條件而定。如果您是在美國東部 (維吉尼亞北部) AWS 區域 建立儲存貯體,就不會看到重新引導,因為其本身也屬於預設的 Amazon S3 端點。
但是,若在任何其他區域建立儲存貯體,則任何對儲存貯體提出的要求都會前往預設端點,而儲存貯體的 DNS 項目會傳播。預設端點會要求重新導向到正確的端點,並傳回 HTTP 302 回應。暫時性重新導向會包含正確設備的 URI,您可使用來立即重新傳送要求。
重要
請勿重複使用前述重新導向回應提供的端點。該端點可能看似運作正常 (即使是長時間運作),但其可能會提供無法預測的結果,最終導致失敗且不會產生任何通知。
下圖過程顯示暫時性重新導向路由範例。
![顯示當用戶端傳送請求到 B,然後被重新導向至 C 時所發生步驟的圖表。](images/DNS_virthost_redirect.png)
暫時要求重新導向步驟
-
用戶端提出 DNS 請求,以取得存放在 Amazon S3 上的物件。
-
用戶端收到一或多個可處理要求的設備 IP 位址。
-
用戶端向 Amazon S3 設備 B 提出請求。
-
設備 B 傳回重新導向,表示可從位置 C 使用該物件。
-
用戶端將要求重新傳送至設備 C。
-
設備 C 傳回物件的複本。
永久性要求重新導向
永久性重新導向表示要求設定的資源位置錯誤。例如,若您使用路徑型要求來存取使用 <CreateBucketConfiguration>
建立的儲存貯體,就會發生永久性重新導向。如需詳細資訊,請參閱「存取及列出 Amazon S3 儲存貯體」。
為協助您在部署期間找出這些錯誤,這類重新導向都不會包含可讓您自動跟隨要求前往正確位置的位置 HTTP 標頭。如需使用正確 Amazon S3 端點方面的說明,請參閱產生的 XML 錯誤文件。
要求重新導向範例
下圖為暫時重新導回應範例。
REST API 暫時要求重新導向回應
HTTP/1.1 307 Temporary Redirect Location: http://awsexamplebucket1.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>awsexamplebucket1.s3-gztb4pa9sq.amazonaws.com</Endpoint> </Error>
SOAP API 暫時要求重新導向回應
注意
HTTP 上的 SOAP 支援已淘汰,但仍可透過 HTTPS 取得 SOAP。SOAP 不支援新的 Amazon S3 功能。建議您不使用 SOAP,而改用 REST API 或 AWS SDK。
<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>
DNS 考量
Amazon S3 的設計要求之一是極高的可用性。符合此要求的其中一種方式是視需要更新與 DNS 中 Amazon S3 端點相關聯的 IP 地址。這些變更會自動反映至短期用戶端,而不是一些長期用戶端。長期用戶端需要定期採取特殊動作來重新解析 Amazon S3 端點,以從這些變更受益。如需虛擬機器 (VM) 的詳細資訊,請參閱下列項目:
-
針對 Java,根據預設,Sun 的 JVM 會永久快取 DNS 查閱;如需如何變更此行為的資訊,請前往 InetAddress 文件
的「InetAddress 快取」一節。 -
針對 PHP,除非重新啟動 VM,否則最常見部署組態中執行的持久性 PHP VM 會快取 DNS 查閱。前往 getHostByName PHP 文件
。