本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HTTP 客户端
在使用构建的应用程序中,您可以更改 HTTP 客户端的默认配置AWS SDK for Java 2.x。本节讨论 SDK 的 HTTP 客户端和设置。
适用于 Java 的 SDK 中的可用客户端
同步客户端
同步服务客户端,例如 S3ClientDynamoDbClient
- ApacheHttpClient(默认)
-
ApacheHttpClient
是同步服务客户端的默认 HTTP 客户端。有关配置的信息 ApacheHttpClient
,请参见配置基于 Apache 的 HTTP 客户端。 - UrlConnectionHttpClient
-
作为重量较轻的选项
ApacheHttpClient
,您可以使用UrlConnectionHttpClient。有关配置的信息 UrlConnectionHttpClient
,请参见配置基于 URL 连接的 HTTP 客户端。
异步客户端
异步服务客户端(例如 S 3 AsyncClientDynamoDbAsyncClient
- NettyNioAsyncHttpClient(默认)
-
NettyNioAsyncHttpClient
是异步客户端使用的默认 HTTP 客户端。有关配置的信息 NettyNioAsyncHttpClient
,请参见配置基于 Netty 的 HTTP 客户端。 - AwsCrtAsyncHttpClient
-
与之相比 AwsCrtAsyncHttpClient
,新版本的加载时间也更短 NettyNioAsyncHttpClient
,也已上市。有关配置的信息AwsCrtAsyncHttpClient
,请参见配置AWS基于 CRT 的 HTTP 客户端。
HTTP 客户端建议
选择 HTTP 客户端实现时,有几个因素会起作用。使用以下信息来帮助您做出决定。
推荐流程图
以下流程图提供了一般指导,可帮助您确定要使用哪个 HTTP 客户端。

HTTP 客户端比较
下表提供了每个 HTTP 客户端的详细信息。
HTTP 客户端 | 同步或异步 | 何时使用 | 局限性/缺点 |
---|---|---|---|
基于阿帕奇的 HTTP 客户端 (默认同步 HTTP 客户端) |
Sync(同步) | 如果您更喜欢低延迟而不是高吞吐量,请使用它 | 与其他 HTTP 客户端相比,启动时间更慢 |
基于 URL 连接的 HTTP 客户端 | Sync(同步) | 如果您对限制第三方依赖有硬性要求,请使用它 | 不支持 HTTP 补丁方法,这是亚马逊 APIGateWay 更新操作等某些 API 所必需的 |
基于网络的 HTTP 客户端 (默认异步 HTTP 客户端) |
异步 |
• 如果您的应用程序调用需要 HTTP/2 支持的 API,例如 Kinesis API,请使用它 SubscribeToShard • 如果你更喜欢高吞吐量而不是低延迟,并且你的操作系统使用 Alpine Linux 等 m usl |
与其他 HTTP 客户端相比,启动时间更慢 |
AWS基于CRT的HTTP客户端 1 | 异步 |
• 如果您的应用程序正在运行,请使用它 AWS Lambda • 如果您更喜欢高吞吐量而不是低延迟,请使用它 |
• 不支持需要 HTTP/2 支持的服务客户端,例如和 •不支持基于 musl 的操作系统,例如 Alpine Linux |
1 我们建议您尽可能使用AWS基于 CRT 的 HTTP 客户端,因为它还有其他好处。
智能配置默认值
AWS SDK for Java 2.x(版本 2.17.102 或更高版本)提供智能配置默认功能。此功能优化了两个 HTTP 客户端属性以及其他不影响 HTTP 客户端的属性。
智能配置默认值会根据您提供的默认模式值为connectTimeoutInMillis
和tlsNegotiationTimeoutInMillis
属性设置合理的值。您可以根据应用程序的特性选择默认模式值。
有关智能配置默认值以及如何选择最适合您的应用程序的默认模式值的更多信息,请参阅 AWSSDK 和工具参考指南。
以下是为应用程序设置默认模式的四种方法。
如果您使用系统属性、环境变量或AWS配置文件全局设置默认模式,则可以在构建 HTTP 客户端时覆盖这些设置。
当您使用该httpClientBuilder()
方法构建 HTTP 客户端时,设置仅适用于您正在构建的实例。此处显示了一个示例。本示例中基于 Netty 的 HTTP 客户端会覆盖全局为和设置的任何默认模式值。connectTimeoutInMillis
tlsNegotiationTimeoutInMillis
代理支持
您可以使用代码、设置 Java 系统属性或结合这两种方法来配置 HTTP 代理。SDK 目前不支持用于配置代理的环境变量。
构建服务客户端时,您可以使用特定于客户端的ProxyConfiguration
生成器在代码中配置代理。本主题中每个 HTTP 客户端的部分显示了代理配置示例。此示例适用于 Apache HTTP 客户端。
HTTP 客户端对 HTTP 代理的 Java 系统属性的支持 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
系统属性 | 描述 | HTTP 客户端支持 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HTTP.proxyHost |
HTTP 代理服务器的主机名 |
全部 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HTTP.proxyPort |
HTTP 代理服务器的端口号 |
全部 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
http.proxUser |
HTTP 代理服务器身份验证的用户名 |
全部 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
http.proxyPro |
HTTP 代理服务器身份验证的密码 |
全部 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
http。 nonProxyHosts |
应绕过代理直接访问的主机列表。在@@ 使用 HTTPS 时也有效 |
全部 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
https.proxyH |
HTTPS 代理服务器的主机名 |
Netty,CRT |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
https.proxyP |
HTTPS 代理服务器的端口号 |
Netty,CRT |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
https.proxUser |
HTTPS 代理身份验证的用户名 |
Netty,CRT | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
https:/proxy | HTTPS 代理服务器身份验证的密码 | Netty,CRT |
表中使用的术语意味着:
-
全部:SDK 提供的所有 HTTP 客户端—
UrlConnectionHttpClient
、ApacheHttpClient
、NettyNioAsyncHttpClient
、AwsCrtAsyncHttpClient
-
Netty:基于 Netty 的 HTTP 客户端 ()
NettyNioAsyncHttpClient
-
CRT:AWS基于 CRT 的 HTTP 客户端,()
AwsCrtAsyncHttpClient
您可以混合使用 HTTP 客户端配置和系统属性。每个 HTTP 客户端的ProxyConfiguration
生成器都提供一个useSystemPropertyValues
设置。默认情况下,该设置为true
。当设置为时true
,SDK 会自动使用ProxyConfiguration
构建器未提供的选项的系统属性值。
以下示例显示了由系统属性和代码提供的配置。
// Command line with the proxy password set as a system property. $ java -Dhttp.proxyPassword=password -cp ... App // Since the 'useSystemPropertyValues' setting is 'true' (the default), the SDK will supplement // the proxy configuration in code with the 'http.proxyPassword' value from the system property. SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://localhost:1234")) .username("username") .build()) .build(); // Use the apache HTTP client with proxy configuration. DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient) .build();
注意
您可以使用以下系统endpoint
属性,而不必像前面的代码片段所示那样在代码中设置属性。
-Dhttp.proxyHost=localhost -Dhttp.proxyPort=1234