

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

# 在 中設定 HTTP 用戶端 AWS SDK for Java 2.x
<a name="http-configuration"></a>

您可以變更 HTTP 用戶端以用於您的服務用戶端，以及使用 變更 HTTP 用戶端的預設組態 AWS SDK for Java 2.x。本節討論 開發套件的 HTTP 用戶端和設定。

## 適用於 Java 的 開發套件中可用的 HTTP 用戶端
<a name="http-clients-available"></a>

### 同步用戶端
<a name="http-config-sync"></a>

適用於 Java 的 SDK 中的同步 HTTP 用戶端實作 [SdkHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/SdkHttpClient.html) 介面。同步服務用戶端，例如 `S3Client`或 `DynamoDbClient`，需要使用同步 HTTP 用戶端。 適用於 Java 的 AWS SDK 提供三個同步 HTTP 用戶端。

**ApacheHttpClient （預設）**  
[ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html) 是同步服務用戶端的預設 HTTP 用戶端。如需設定 的資訊`ApacheHttpClient`，請參閱 [設定 Apache 型 HTTP 用戶端](http-configuration-apache.md)。

**AwsCrtHttpClient**  
[AwsCrtHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtHttpClient.html) 提供高輸送量和非封鎖 IO。它建置在 AWS 通用執行期 (CRT) Http 用戶端上。如需設定 `AwsCrtHttpClient`並搭配 服務用戶端使用的資訊，請參閱 [設定 AWS CRT 型 HTTP 用戶端](http-configuration-crt.md)。

**UrlConnectionHttpClient**  
若要將應用程式使用的 jar 和第三方程式庫數量降至最低，您可以使用 [UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html)。如需設定 的資訊`UrlConnectionHttpClient`，請參閱 [設定 URLConnection 型 HTTP 用戶端](http-configuration-url.md)。

**Apache5HttpClient**  
[Apache5HttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache5/Apache5HttpClient.html) 是`ApacheHttpClient`建置在 *Apache 5.x HttpClient 上的更新版本。5.x 版*是 Apache 主動維護的版本，透過提供現代 Java 生態系統相容性`ApacheHttpClient`，包括 Java 21 的虛擬執行緒支援，以及透過 SLF4J 增強的記錄靈活性，來改善先前使用的版本。 `Apache5HttpClient`將在未來版本的適用於 Java 2.x 的 AWS SDK 中取代 `ApacheHttpClient` 為預設同步用戶端。它具有相同的 API 和功能，使其成為插入式取代的理想選擇。如需設定 的資訊`Apache5HttpClient`，請參閱 [設定 Apache 5.x 型 HTTP 用戶端](http-configuration-apache5.md)。

### 非同步用戶端
<a name="http-config-async"></a>

適用於 Java 的 SDK 中的非同步 HTTP 用戶端實作 [SdkAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/async/SdkAsyncHttpClient.html) 介面。非同步服務用戶端，例如 `S3AsyncClient`或 `DynamoDbAsyncClient`，需要使用非同步 HTTP 用戶端。 適用於 Java 的 AWS SDK 提供兩個非同步 HTTP 用戶端。

**NettyNioAsyncHttpClient （預設）**  
[NettyNioAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html) 是非同步用戶端使用的預設 HTTP 用戶端。如需設定 的資訊`NettyNioAsyncHttpClient`，請參閱 [設定 Netty 型 HTTP 用戶端](http-configuration-netty.md)。

**AwsCrtAsyncHttpClient**  
[AwsCrtAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtAsyncHttpClient.html) 是以 AWS 通用執行期 (CRT) HTTP 用戶端為基礎。如需設定 的資訊`AwsCrtAsyncHttpClient`，請參閱 [設定 AWS CRT 型 HTTP 用戶端](http-configuration-crt.md)。

## HTTP 用戶端建議
<a name="http-clients-recommend"></a>

當您選擇 HTTP 用戶端實作時，有幾個因素發揮作用。使用下列資訊來協助您做出決定。

### HTTP 用戶端比較
<a name="http-clients-recommend-compare"></a>

下表提供每個 HTTP 用戶端的詳細資訊。


| HTTP 用戶端 | 同步或非同步 | 使用情況 | 限制/撤回 | 
| --- | --- | --- | --- | 
|  Apache 型 HTTP 用戶端 *（預設同步 HTTP 用戶端）* | Sync | 如果您偏好低延遲而非高輸送量，請使用它  | 與其他 HTTP 用戶端相比，啟動時間較慢 | 
| URLConnection 型 HTTP 用戶端 | Sync | 如果您有限制第三方相依性的硬性需求，請使用它 | • 不支援 HTTP PATCH 方法，某些 APIs 需要此方法，例如 Amazon APIGateway Update 操作<br />• 不支援可設定的閒置連線逾時。如需詳細資訊[，請參閱設定 URLConnection 型 HTTP 用戶端](http-configuration-url.md)。 | 
| AWS 以 CRT 為基礎的同步 HTTP 用戶端1  | Sync | • 如果您的應用程式在 中執行，請使用它 AWS Lambda<br />• 如果您偏好高輸送量而非低延遲，請使用它<br />• 如果您偏好同步 SDK 用戶端，請使用它 | 不支援下列 Java 系統屬性：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/sdk-for-java/latest/developer-guide/http-configuration.html) | 
|  Netty 型 HTTP 用戶端 *（預設非同步 HTTP 用戶端）* | 非同步 | • 如果您的應用程式依賴 TLS 組態的 Java 系統屬性 （例如 `javax.net.ssl.keyStore`)，請使用它 | 與其他 HTTP 用戶端相比，啟動時間較慢 | 
|  AWS 以 CRT 為基礎的非同步 HTTP 用戶端1  | 非同步 | • 如果您的應用程式在 中執行，請使用它 AWS Lambda<br />• 如果您偏好高輸送量而非低延遲，請使用它• 如果您偏好非同步 SDK 用戶端，請使用它 | 不支援下列 Java 系統屬性：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/sdk-for-java/latest/developer-guide/http-configuration.html) | 

1由於其新增優點，我們建議您盡可能使用 AWS CRT 型 HTTP 用戶端。

## 智慧組態預設值
<a name="http-config-smart-defaults"></a>

 AWS SDK for Java 2.x (2.17.102 版或更新版本） 提供智慧型組態預設功能。此功能可最佳化兩個 HTTP 用戶端屬性，以及其他不會影響 HTTP 用戶端的屬性。

智慧組態預設值會根據您提供的預設模式值，設定 `connectTimeoutInMillis`和 `tlsNegotiationTimeoutInMillis` 屬性的合理值。您可以根據應用程式的特性選擇預設模式值。

如需智慧組態預設值以及如何選擇最適合您應用程式的預設模式值的詳細資訊，請參閱 [AWS SDKs和工具參考指南](https://docs.aws.amazon.com/sdkref/latest/guide/feature-smart-config-defaults.html)。

以下是為您的應用程式設定預設模式的四種方法。

------
#### [ Service client ]

使用服務用戶端建置器直接在服務用戶端上設定預設模式。下列範例會將 的預設模式設定為 `auto` `DynamoDbClient`。

```
DynamoDbClient ddbClient = DynamoDbClient.builder()
                            .defaultsMode(DefaultsMode.AUTO)
                            .build();
```

------
#### [ System property ]

您可以使用 `aws.defaultsMode` 系統屬性來指定預設模式。如果您在 Java 中設定系統屬性，則需要在初始化任何服務用戶端之前設定 屬性。

下列範例說明如何`auto`使用 Java 中的系統屬性集，將預設模式設定為 。

```
System.setProperty("aws.defaultsMode", "auto");
```

下列範例示範如何使用 `java`命令`auto``-D`的選項，將預設模式設定為 。

```
java -Daws.defaultsMode=auto
```

------
#### [ Environment variable ]

設定環境變數的值`AWS_DEFAULTS_MODE`，為您的應用程式選取預設模式。

下列資訊顯示執行 命令，以`auto`使用 環境變數將預設模式的值設定為 。


| 作業系統 | 用於設定環境變數的命令 | 
| --- | --- | 
| Linux、macOS 或 Unix | export AWS\_DEFAULTS\_MODE=auto | 
| Windows | set AWS\_DEFAULTS\_MODE=auto | 

------
#### [ AWS config file ]

您可以將`defaults_mode`組態屬性新增至共用 AWS `config`檔案，如下列範例所示。

```
[default]
defaults_mode = auto
```

------

如果您使用系統屬性、環境變數或 AWS 組態檔案全域設定預設模式，您可以在建置 HTTP 用戶端時覆寫設定。

當您使用 `httpClientBuilder()`方法建置 HTTP 用戶端時，設定僅適用於您正在建置的執行個體。[此處](http-configuration-netty.md#http-config-netty-one-client)顯示範例。此範例中的 Netty 型 HTTP 用戶端會覆寫 `connectTimeoutInMillis`和 全域設定的任何預設模式值`tlsNegotiationTimeoutInMillis`。