

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.

# Comprimir las solicitudes HTTP en Amazon OpenSearch Service
<a name="gzip"></a>

Puedes comprimir las solicitudes y respuestas HTTP en los dominios de Amazon OpenSearch Service mediante la compresión gzip. La compresión gzip puede ayudar a reducir el tamaño de los documentos y a reducir la utilización y la latencia de la banda ancha, lo que permite mejorar las velocidades de transferencia.

La compresión Gzip es compatible con todos los dominios que ejecutan Elasticsearch OpenSearch 6.0 o una versión posterior. Algunos OpenSearch clientes tienen soporte integrado para la compresión gzip, y muchos lenguajes de programación tienen bibliotecas que simplifican el proceso.

## Habilitar la compresión gzip
<a name="gzip-enable"></a>

No debe confundirse con una OpenSearch configuración similar, `http_compression.enabled` es específica del OpenSearch Servicio y habilita o deshabilita la compresión gzip en un dominio. Dominios que ejecutan OpenSearch Elasticsearch 7. *x* tienen la compresión gzip habilitada de forma predeterminada, mientras que los dominios que ejecutan Elasticsearch 6. *x* la tienen deshabilitada de forma predeterminada.

Para habilitar la compresión gzip, envíe la siguiente solicitud:

```
PUT _cluster/settings
{
  "persistent" : {
    "http_compression.enabled": true
  }
}
```

Solicitudes a `_cluster/settings` deben estar descomprimidas, por lo que es posible que necesite utilizar un cliente independiente o una solicitud HTTP estándar para actualizar la configuración del clúster.

Para confirmar que ha habilitado correctamente la compresión gzip, envíe la siguiente solicitud:

```
GET _cluster/settings?include_defaults=true
```

Asegúrese de ver la siguiente configuración en la respuesta:

```
...
"http_compression": {
  "enabled": "true"
}
...
```

## Encabezados obligatorios
<a name="gzip-headers"></a>

Al incluir un cuerpo de la solicitud comprimido por gzip, mantenga el encabezado estándar `Content-Type: application/json` y agregue el encabezado `Content-Encoding: gzip`. Para aceptar una respuesta comprimida con gzip, agregue también el encabezado `Accept-Encoding: gzip`. Si un OpenSearch cliente admite la compresión gzip, es probable que incluya estos encabezados automáticamente.

## Código de muestra (Python 3)
<a name="gzip-code"></a>

En el siguiente ejemplo se utiliza [opensearch-py](https://pypi.org/project/opensearch-py/) para realizar la compresión y enviar la solicitud. Este código firma la solicitud mediante sus credenciales de IAM. 

```
from opensearchpy import OpenSearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth
import boto3

host = '' # e.g. my-test-domain.us-east-1.es.amazonaws.com
region = '' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

# Create the client.
search = OpenSearch(
    hosts = [{'host': host, 'port': 443}],
    http_auth = awsauth,
    use_ssl = True,
    verify_certs = True,
    http_compress = True, # enables gzip compression for request bodies
    connection_class = RequestsHttpConnection
)

document = {
  "title": "Moneyball",
  "director": "Bennett Miller",
  "year": "2011"
}

# Send the request.
print(search.index(index='movies', id='1', body=document, refresh=True))

# print(search.index(index='movies', doc_type='_doc', id='1', body=document, refresh=True))
```

Como alternativa, puede especificar los encabezados adecuados, comprimir el cuerpo de la solicitud usted mismo y utilizar una biblioteca HTTP estándar como [Solicitudes](https://2.python-requests.org). Este código firma la solicitud con credenciales básicas HTTP, que podrían ser compatibles con el dominio si utiliza el [control de acceso detallado](fgac.md).

```
import requests
import gzip
import json

base_url = '' # The domain with https:// and a trailing slash. For example, https://my-test-domain.us-east-1.es.amazonaws.com/
auth = ('master-user', 'master-user-password') # For testing only. Don't store credentials in code.

headers = {'Accept-Encoding': 'gzip', 'Content-Type': 'application/json',
           'Content-Encoding': 'gzip'}

document = {
  "title": "Moneyball",
  "director": "Bennett Miller",
  "year": "2011"
}

# Compress the document.
compressed_document = gzip.compress(json.dumps(document).encode())

# Send the request.
path = 'movies/_doc?refresh=true'
url = base_url + path
response = requests.post(url, auth=auth, headers=headers, data=compressed_document)
print(response.status_code)
print(response.text)
```