

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengompresi permintaan HTTP di Layanan Amazon OpenSearch
<a name="gzip"></a>

Anda dapat mengompres permintaan dan tanggapan HTTP di domain OpenSearch Layanan Amazon menggunakan kompresi gzip. Kompresi Gzip dapat membantu Anda mengurangi ukuran dokumen dan menurunkan penggunaan bandwidth dan latensi, sehingga meningkatkan kecepatan transfer.

Kompresi Gzip didukung untuk semua domain yang berjalan OpenSearch atau Elasticsearch 6.0 atau yang lebih baru. Beberapa OpenSearch klien memiliki dukungan built-in untuk kompresi gzip, dan banyak bahasa pemrograman memiliki perpustakaan yang menyederhanakan proses.

## Mengaktifkan kompresi gzip
<a name="gzip-enable"></a>

Jangan bingung dengan OpenSearch pengaturan serupa, `http_compression.enabled` khusus untuk OpenSearch Layanan dan mengaktifkan atau menonaktifkan kompresi gzip pada domain. Domain berjalan OpenSearch atau Elasticsearch 7. *x* mengaktifkan kompresi gzip secara default, sedangkan domain yang menjalankan Elasticsearch 6. *x* menonaktifkannya secara default.

Untuk mengaktifkan kompresi gzip, kirim permintaan berikut:

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

Permintaan ke `_cluster/settings` harus tidak dikompresi, jadi Anda mungkin perlu menggunakan klien terpisah atau permintaan HTTP standar untuk memperbarui pengaturan klaster.

Untuk mengonfirmasi bahwa Anda berhasil mengaktifkan kompresi gzip, kirim permintaan berikut:

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

Pastikan Anda melihat pengaturan berikut dalam respons:

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

## Header yang dibutuhkan
<a name="gzip-headers"></a>

Ketika menyertakan isi permintaan terkompresi gzip, pertahankan standar header `Content-Type: application/json`, dan tambahkan header `Content-Encoding: gzip`. Untuk menerima respon terkompresi gzip, tambahkan header `Accept-Encoding: gzip` juga. Jika OpenSearch klien mendukung kompresi gzip, kemungkinan akan menyertakan header ini secara otomatis.

## Contoh kode (Python 3)
<a name="gzip-code"></a>

Sampel berikut menggunakan [opensearch-py](https://pypi.org/project/opensearch-py/) untuk melakukan kompresi dan mengirim permintaan. Kode ini menandatangani permintaan menggunakan kredensial IAM Anda. 

```
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))
```

Sebagai alternatif, Anda dapat menentukan tajuk yang tepat, mengompres sendiri isi permintaan, dan menggunakan pustaka HTTP standar seperti [Permintaan](https://2.python-requests.org). Kode ini menandatangani permintaan menggunakan kredensial dasar HTTP, yang mungkin didukung domain Anda jika Anda menggunakan [kontrol akses detail](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)
```