

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

# 要求路由
<a name="UsingRouting"></a>

對使用 [CreateBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html) API (包含 [CreateBucketConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketConfiguration.html)) 建立的儲存貯體提出請求的程式必須支援重新導向。此外，未採用 DNS TTL 的某些用戶端可能會遇到問題。

本節說明設計服務或應用程式以搭配 Amazon S3 使用時須考量的路由與 DNS 問題。

## 要求重新導向與 REST API
<a name="Redirects"></a>

Amazon S3 會使用網域名稱系統 (DNS) 將請求路由到能夠處理請求的設備。此系統有效率執行作業，但是也可能會發生暫時性的路由錯誤。若請求抵達錯誤的 Amazon S3 位置，則 Amazon S3 會以暫時重新導向回應，指示申請者將請求重新傳送到新端點。若請求的格式錯誤，Amazon S3 會使用永久重新導向來指示如何正確執行請求。

**重要**  
您必須擁有可以處理 Amazon S3 重新導向回應的應用程式，才可以使用此功能。此應用程式唯一的例外是專為不使用 `<CreateBucketConfiguration>` 建立儲存貯體。如需位置限制的詳細資訊，請參閱[存取和列出 Amazon S3 儲存貯體。 ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)  
如果區域是在 2019 年 3 月 20 日後才推出，則當請求抵達錯誤的 Amazon S3 位置時，Amazon S3 會傳回「HTTP 400 錯誤的請求」錯誤。  
如需啟用或停用 的詳細資訊 AWS 區域，請參閱 中的 [AWS 區域 和 端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)*AWS 一般參考*。

**Topics**
+ [DNS 路由](#DNSRouting)
+ [暫時要求重新導向](#TemporaryRedirection)
+ [永久性要求重新導向](#RedirectsPermanentRedirection)
+ [要求重新導向範例](#redirect-examples)

### DNS 路由
<a name="DNSRouting"></a>

DNS 路由會將請求路由到合適的 Amazon S3 設備。下圖範例顯示 DNS 路由過程。

![當 DNS 伺服器將請求從用戶端路由到設施 B 時發生的步驟。](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/developerguide/images/DNS_virthost.png)


**DNS 路由要求步驟**

1. 用戶端提出 DNS 請求，以取得存放在 Amazon S3 上的物件。

1. 用戶端收到一或多個可處理要求的設備 IP 位址。在此範例中，IP 地址為 B 設施。

1. 用戶端向 Amazon S3 設備 B 提出請求。

1. 設備 B 傳回物件的複本至客戶端。

### 暫時要求重新導向
<a name="TemporaryRedirection"></a>

暫時性重新導向是一種錯誤回應，會向申請者發出訊息，要求其必須將要求重新傳送至其他端點。Amazon S3 的分散特性可能會使請求暫時路由至錯誤的設備。這是相當少見的情況，最可能在建立儲存貯體之後立即發生。

例如，若您在建立新儲存貯體後立即向儲存貯體提出要求，就可能會收到暫時性重新導向，這會視儲存貯體的位置限制條件而定。如果您在美國東部 （維吉尼亞北部） 建立儲存貯體 AWS 區域，則不會看到重新導向，因為這也是預設的 Amazon S3 端點。

但是，若在任何其他區域建立儲存貯體，則任何對儲存貯體提出的要求都會前往預設端點，而儲存貯體的 DNS 項目會傳播。預設端點會要求重新導向到正確的端點，並傳回 HTTP 302 回應。暫時性重新導向會包含正確設備的 URI，您可使用來立即重新傳送要求。

**重要**  
請勿重複使用前述重新導向回應提供的端點。該端點可能看似運作正常 (即使是長時間運作)，但其可能會提供無法預測的結果，最終導致失敗且不會產生任何通知。

下圖過程顯示暫時性重新導向路由範例。

![當用戶端傳送請求至 B 並重新導向至 C 時發生的步驟。](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/developerguide/images/DNS_virthost_redirect.png)


**暫時要求重新導向步驟**

1. 用戶端提出 DNS 請求，以取得存放在 Amazon S3 上的物件。

1. 用戶端收到一或多個可處理要求的設備 IP 位址。

1. 用戶端向 Amazon S3 設備 B 提出請求。

1. 設備 B 傳回重新導向，表示可從位置 C 使用該物件。

1. 用戶端將要求重新傳送至設備 C。

1. 設備 C 傳回物件的複本。

### 永久性要求重新導向
<a name="RedirectsPermanentRedirection"></a>

永久性重新導向表示要求設定的資源位置錯誤。例如，若您使用路徑型要求來存取使用 `<CreateBucketConfiguration>` 建立的儲存貯體，就會發生永久性重新導向。如需詳細資訊，請參閱[存取和列出 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。

為協助您在部署期間找出這些錯誤，這類重新導向都不會包含可讓您自動跟隨要求前往正確位置的位置 HTTP 標頭。如需使用正確 Amazon S3 端點方面的說明，請參閱產生的 XML 錯誤文件。

### 要求重新導向範例
<a name="redirect-examples"></a>

下圖為暫時重新導回應範例。

#### REST API 暫時要求重新導向回應
<a name="RedirectsTemporaryRedirection-response-rest-ex1"></a>

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

#### SOAP API 暫時要求重新導向回應
<a name="RedirectsTemporaryRedirection-respose-soap-ex2"></a>

**注意**  
 Amazon S3 的 SOAP API 不適用於新客戶，並且將於 2025 年 8 月 31 日接近生命週期結束 (EOL)。我們建議您使用 REST API 或 AWS SDKs。

```
 1. <soapenv:Body>
 2.   <soapenv:Fault>
 3.     <Faultcode>soapenv:Client.TemporaryRedirect</Faultcode>
 4.     <Faultstring>Please re-send this request to the specified temporary endpoint.
 5.     Continue to use the original request endpoint for future requests.</Faultstring>
 6.     <Detail>
 7.       <Bucket>images</Bucket>
 8.       <Endpoint>s3-gztb4pa9sq.amazonaws.com</Endpoint>
 9.     </Detail>
10.   </soapenv:Fault>
11. </soapenv:Body>
```

## DNS 考量
<a name="DNSConsiderations"></a>

 Amazon S3 的設計要求之一是極高的可用性。符合此要求的其中一種方式是視需要更新與 DNS 中 Amazon S3 端點相關聯的 IP 地址。這些變更會自動反映至短期用戶端，而不是一些長期用戶端。長期用戶端需要定期採取特殊動作來重新解析 Amazon S3 端點，以從這些變更受益。如需虛擬機器 (VM) 的詳細資訊，請參閱下列項目：
+  針對 Java，根據預設，Sun 的 JVM 會永久快取 DNS 查閱；如需如何變更此行為的資訊，請前往 [InetAddress 文件](https://docs.oracle.com/javase/9/docs/api/java/net/InetAddress.html)的「InetAddress 快取」一節。
+  針對 PHP，除非重新啟動 VM，否則最常見部署組態中執行的持久性 PHP VM 會快取 DNS 查閱。前往 [getHostByName PHP 文件](http://us2.php.net/manual/en/function.gethostbyname.php)。