

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Compressione delle richieste HTTP in Amazon OpenSearch Service
<a name="gzip"></a>

Puoi comprimere le richieste e le risposte HTTP nei domini Amazon OpenSearch Service utilizzando la compressione gzip. La compressione gzip consente di ridurre le dimensioni dei documenti e di ridurre l'utilizzo della larghezza di banda e la latenza, migliorando così la velocità di trasferimento.

La compressione Gzip è supportata per tutti i domini che eseguono Elasticsearch 6.0 OpenSearch o versioni successive. Alcuni OpenSearch client dispongono del supporto integrato per la compressione gzip e molti linguaggi di programmazione dispongono di librerie che semplificano il processo.

## Abilitazione della compressione gzip
<a name="gzip-enable"></a>

Da non confondere con OpenSearch impostazioni simili, `http_compression.enabled` è specifico di OpenSearch Service e abilita o disabilita la compressione gzip su un dominio. Domini in esecuzione OpenSearch o Elasticsearch 7. *x* hanno la compressione gzip abilitata per impostazione predefinita, mentre i domini che eseguono Elasticsearch 6. *x l'hanno disabilitata* per impostazione predefinita.

Per abilitare la compressione gzip, inviare la seguente richiesta:

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

Le richieste a `_cluster/settings` devono essere decompresse, quindi potrebbe essere necessario utilizzare un client separato o una richiesta HTTP standard per aggiornare le impostazioni del cluster.

Per confermare di aver abilitato correttamente la compressione gzip, invia la seguente richiesta:

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

Assicurati di vedere la seguente impostazione nella risposta:

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

## Intestazioni richieste
<a name="gzip-headers"></a>

Quando si include un corpo di richiesta compresso con gzip, mantenere l'intestazione `Content-Type: application/json` standard e aggiungere l'intestazione `Content-Encoding: gzip`. Per accettare una risposta gzip compressa, aggiungere anche l'intestazione `Accept-Encoding: gzip`. Se un OpenSearch client supporta la compressione gzip, probabilmente include queste intestazioni automaticamente.

## Codice di esempio (Python 3)
<a name="gzip-code"></a>

Nell'esempio seguente viene utilizzato [opensearch-py](https://pypi.org/project/opensearch-py/) per eseguire la compressione e inviare la richiesta. Questo codice firma la richiesta utilizzando le credenziali 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))
```

In alternativa, è possibile specificare le intestazioni corrette, comprimere il corpo della richiesta da soli e utilizzare una libreria HTTP standard come [Requests](https://2.python-requests.org). Questo codice firma la richiesta utilizzando le credenziali di base HTTP, che il dominio potrebbe supportare se si utilizza il [controllo granulare degli accessi](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)
```