

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configure los clientes HTTP en el AWS SDK for Java 2.x
<a name="http-configuration"></a>

Puede cambiar el cliente HTTP para usarlo en su cliente de servicio, así como cambiar la configuración predeterminada de los clientes HTTP con AWS SDK for Java 2.x. En esta sección se describen los clientes HTTP y la configuración del SDK.

## Clientes HTTP disponibles en el SDK para Java
<a name="http-clients-available"></a>

### Clientes síncronos
<a name="http-config-sync"></a>

Los clientes HTTP sincrónicos del SDK para Java implementan la [SdkHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/SdkHttpClient.html)interfaz. Un cliente de servicio síncrono, como el `S3Client` o el `DynamoDbClient`, requiere el uso de un cliente HTTP síncrono. AWS SDK para Java Ofrece tres clientes HTTP sincrónicos.

**ApacheHttpClient (predeterminado)**  
[ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html)es el cliente HTTP predeterminado para los clientes de servicios síncronos. Para obtener información acerca de cómo configurar el `ApacheHttpClient`, consulte [Configurar el cliente HTTP basado en Apache](http-configuration-apache.md). 

**AwsCrtHttpClient**  
[AwsCrtHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtHttpClient.html)proporciona E/S de alto rendimiento y sin bloqueo. Se basa en el cliente HTTP AWS Common Runtime (CRT). Para obtener información sobre cómo configurar el `AwsCrtHttpClient` y utilizar el servicio con los clientes, consulte [Configurar clientes AWS HTTP basados en CRT](http-configuration-crt.md).

**UrlConnectionHttpClient**  
Para minimizar la cantidad de archivos jar y bibliotecas de terceros que utiliza la aplicación, puede utilizar el [UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html). Para obtener información acerca de cómo configurar el `UrlConnectionHttpClient`, consulte [Configurar el cliente HTTP URLConnection basado](http-configuration-url.md).

**Apache 5 HttpClient**  
[Apache5 HttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache5/Apache5HttpClient.html) *es una versión actualizada `ApacheHttpClient` que se basa en Apache 5.x. HttpClient La versión 5.x* es la versión que Apache mantiene activamente y mejora la versión anterior utilizada al ofrecer compatibilidad con el ecosistema moderno de Java, incluida la compatibilidad con subprocesos virtuales para Java 2.1 y una mayor flexibilidad de registro mediante SLF4 J. que `Apache5HttpClient` sustituirá `ApacheHttpClient` como cliente síncrono predeterminado en una futura versión del AWS SDK para Java 2.x. `ApacheHttpClient` Cuenta con una API y características idénticas, lo que la hace ideal como reemplazo directo. Para obtener información acerca de cómo configurar el `Apache5HttpClient`, consulte [Configurar el cliente HTTP basado en Apache 5.x](http-configuration-apache5.md).

### Clientes asíncronos
<a name="http-config-async"></a>

Los clientes HTTP asíncronos del SDK for Java implementan la interfaz. [SdkAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/async/SdkAsyncHttpClient.html) Un cliente de servicio asíncrono, como el `S3AsyncClient` o el `DynamoDbAsyncClient`, requiere el uso de un cliente HTTP asíncrono. AWS SDK para Java Ofrece dos clientes HTTP asíncronos.

**NettyNioAsyncHttpClient (predeterminado)**  
[NettyNioAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html)es el cliente HTTP predeterminado que utilizan los clientes asíncronos. Para obtener información acerca de cómo configurar el `NettyNioAsyncHttpClient`, consulte [Configurar el cliente HTTP basado en Netty](http-configuration-netty.md).

**AwsCrtAsyncHttpClient**  
[AwsCrtAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtAsyncHttpClient.html)Se basa en el cliente HTTP AWS Common Runtime (CRT). Para obtener información acerca de cómo configurar el `AwsCrtAsyncHttpClient`, consulte [Configurar clientes AWS HTTP basados en CRT](http-configuration-crt.md). 

## Recomendaciones sobre el cliente HTTP
<a name="http-clients-recommend"></a>

Al elegir una implementación de cliente HTTP entran en juego varios factores. Utilice la siguiente información para ayudarle en la decisión.

### Comparación de clientes HTTP
<a name="http-clients-recommend-compare"></a>

La siguiente tabla proporciona información detallada de cada cliente HTTP. 


| Cliente HTTP | Sínc. or asínc. | Cuándo se debe usar | Limitación o inconveniente | 
| --- | --- | --- | --- | 
|  Cliente HTTP basado en Apache *(cliente HTTP de sincronización predeterminado)* | Sincronizar | Úselo si prefiere una latencia baja en lugar de un alto rendimiento  | Tiempo de startup más lento en comparación con otros clientes HTTP | 
| Cliente HTTP basado en URLConnection | Sincronizar | Úselo si tiene requisitos estrictos para limitar las dependencias de terceros | • No admite el método HTTP PATCH, requerido por algunas operaciones, APIs como Amazon APIGateway Update<br />• No admite un tiempo de espera de conexión inactivo configurable. Consulte [Configurar el cliente HTTP URLConnection basado](http-configuration-url.md) para obtener más información. | 
| AWS Cliente HTTP de sincronización basado en CRT 1  | Sincronizar | • Úselo si su aplicación se está ejecutando en AWS Lambda<br />- Utilícelo si prefiere un alto rendimiento a una baja latencia<br />• Úselo si prefiere clientes del SDK síncronos | Ya no se admiten las siguientes propiedades del sistema de Java.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/sdk-for-java/latest/developer-guide/http-configuration.html) | 
|  Netty-based HTTP client *(cliente HTTP asíncrono predeterminado)* | Asíncrono | • Úselo si su aplicación se basa en las propiedades del sistema Java para la configuración de TLS (por ejemplo) `javax.net.ssl.keyStore` | Tiempo de startup más lento en comparación con otros clientes HTTP | 
|  AWS Cliente HTTP asíncrono basado en CRT 1  | Asíncrono | • Úselo si su aplicación se está ejecutando en AWS Lambda<br />- Utilícelo si prefiere un alto rendimiento a una baja latencia• Úselo si prefiere clientes del SDK asíncronos | Ya no se admiten las siguientes propiedades del sistema de Java.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/sdk-for-java/latest/developer-guide/http-configuration.html) | 

1 Debido a sus ventajas adicionales, le recomendamos que utilice los clientes HTTP AWS basados en CRT si es posible.

## Valores predeterminados de configuración inteligente
<a name="http-config-smart-defaults"></a>

La AWS SDK for Java 2.x versión 2.17.102 o posterior ofrece una función de configuración inteligente por defecto. Esta característica optimiza dos propiedades del cliente HTTP junto con otras propiedades que no afectan al cliente HTTP. 

Los valores predeterminados de la configuración inteligente establecen valores razonables para las propiedades `connectTimeoutInMillis` y `tlsNegotiationTimeoutInMillis` en función del valor de modo predeterminado que proporcione. El valor de modo predeterminado se elige según las características de la aplicación. 

[Para obtener más información sobre los valores predeterminados de la configuración inteligente y sobre cómo elegir el valor de modo predeterminado que mejor se adapte a sus aplicaciones, consulte la AWS SDKs Guía de referencia de herramientas y herramientas.](https://docs.aws.amazon.com/sdkref/latest/guide/feature-smart-config-defaults.html)

A continuación, se muestran cuatro formas de configurar el modo predeterminado para su aplicación.

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

Utilice el generador de clientes de servicio para configurar el modo predeterminado directamente en el cliente de servicio. El siguiente ejemplo establece el modo predeterminado en `auto` para el `DynamoDbClient`.

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

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

Puede usar la propiedad del `aws.defaultsMode` sistema para especificar el modo predeterminado. Si establece la propiedad del sistema en Java, debe establecerla antes de inicializar cualquier cliente de servicio.

En el siguiente ejemplo, se muestra cómo configurar el modo predeterminado en `auto` usar un conjunto de propiedades del sistema en Java.

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

En el siguiente ejemplo, se muestra cómo configurar el modo predeterminado como `auto` mediante una opción `-D` del comando `java`.

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

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

Defina un valor para la variable de entorno `AWS_DEFAULTS_MODE` para seleccionar el modo predeterminado de la aplicación. 

La siguiente información muestra el comando que se debe ejecutar para establecer el valor del modo predeterminado como `auto` utilizando una variable de entorno.


| Sistema operativo | Comando para definir variables de entorno | 
| --- | --- | 
| Linux, macOS o Unix | export AWS\_DEFAULTS\_MODE=auto | 
| Windows | set AWS\_DEFAULTS\_MODE=auto | 

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

Puede añadir una propiedad de `defaults_mode` configuración al AWS `config` archivo compartido, como se muestra en el siguiente ejemplo.

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

------

Si define el modo predeterminado de forma global con la propiedad del sistema, la variable de entorno o el archivo de configuración AWS , puede sustituir la configuración cuando cree un cliente HTTP. 

Al crear un cliente HTTP con el método `httpClientBuilder()`, la configuración se aplica solo a la instancia que se está creando. Un ejemplo de ello se muestra [aquí](http-configuration-netty.md#http-config-netty-one-client). En este ejemplo, el cliente HTTP basado en Netty anula cualquier valor de modo predeterminado establecido globalmente para `connectTimeoutInMillis` y `tlsNegotiationTimeoutInMillis`.