

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

# Sajikan file terkompresi
<a name="ServingCompressedFiles"></a>

Ketika objek yang diminta dikompresi, unduhan bisa lebih cepat karena objek lebih kecil—dalam beberapa kasus, kurang dari seperempat ukuran aslinya. Unduhan yang lebih cepat dapat menghasilkan rendering halaman web yang lebih cepat untuk pemirsa Anda, terutama untuk JavaScript dan file CSS. Selain itu, biaya transfer CloudFront data didasarkan pada jumlah total data yang disajikan. Melayani benda terkompresi bisa lebih murah daripada menyajikannya tanpa kompresi.

**Topics**
+ [Konfigurasikan CloudFront untuk mengompres objek](#compressed-content-cloudfront-configuring)
+ [Bagaimana CloudFront kompresi bekerja](#compressed-content-cloudfront-how-it-works)
+ [Kondisi untuk kompresi](#compressed-content-cloudfront-notes)
+ [Jenis file yang CloudFront mengompres](#compressed-content-cloudfront-file-types)
+ [`ETag`konversi header](#compressed-content-cloudfront-etag-header)

## Konfigurasikan CloudFront untuk mengompres objek
<a name="compressed-content-cloudfront-configuring"></a>

Untuk mengkonfigurasi CloudFront untuk mengompres objek, perbarui perilaku cache yang ingin Anda layani objek terkompresi.

**Untuk mengkonfigurasi CloudFront untuk mengompres objek (konsol)**

1. Masuk ke [konsol CloudFront](https://console.aws.amazon.com/cloudfront/v4/home) tersebut.

1. Pilih distribusi Anda dan kemudian pilih **Perilaku** yang akan diedit.

1. Untuk pengaturan **objek Kompres secara otomatis**, pilih **Ya**. 

1. Gunakan [kebijakan cache](controlling-the-cache-key.md) untuk menentukan pengaturan caching, dan aktifkan format kompresi **Gzip** dan **Brotli**.

**Catatan**  
Anda harus menggunakan [kebijakan cache](controlling-the-cache-key.md) untuk menggunakan kompresi Brotli. Brotli tidak mendukung pengaturan cache lama.
Untuk mengaktifkan kompresi dengan menggunakan [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html)atau [CloudFront](https://docs.aws.amazon.com/cloudfront/latest/APIReference/Welcome.html)API, atur `EnableAcceptEncodingBrotli` parameter `Compress``EnableAcceptEncodingGzip`,, ke`true`.

Untuk memahami bagaimana CloudFront mengompres objek, lihat bagian berikut.

## Bagaimana CloudFront kompresi bekerja
<a name="compressed-content-cloudfront-how-it-works"></a>

1. Penampil meminta sebuah objek. Penampil menyertakan header `Accept-Encoding` HTTP dalam permintaan, dan nilai header termasuk`gzip`,`br`, atau keduanya. Ini menunjukkan bahwa penampil mendukung objek terkompresi. Saat penampil mendukung Gzip dan Brotli, CloudFront gunakan Brotli.
**catatan**  
Browser web Chrome dan Firefox mendukung kompresi Brotli hanya ketika permintaan dikirim menggunakan HTTPS. Mereka tidak mendukung Brotli dengan permintaan HTTP.

1. Di lokasi tepi, CloudFront periksa cache untuk salinan terkompresi dari objek yang diminta.

1. Tergantung apakah objek terkompresi ada dalam cache atau CloudFront tidak, lakukan salah satu hal berikut:
   + Jika objek terkompresi sudah ada di cache, CloudFront kirim objek ke penampil dan lewati langkah-langkah yang tersisa.
   + Jika objek terkompresi tidak ada dalam cache, CloudFront teruskan permintaan ke asal.
**catatan**  
Jika salinan objek yang tidak terkompresi sudah ada di cache, CloudFront mungkin mengirimkannya ke penampil tanpa meneruskan permintaan ke asal. Misalnya, ini bisa terjadi ketika CloudFront [sebelumnya dilewati kompresi](#compression-skipped). Ketika ini terjadi, CloudFront cache objek yang tidak dikompresi dan terus melayani sampai objek kedaluwarsa, diusir, atau tidak valid.

1. Jika asal mengembalikan objek terkompresi, (seperti yang ditunjukkan oleh `Content-Encoding` header dalam respons HTTP), CloudFront mengirimkan objek terkompresi ke penampil, menambahkannya ke cache, dan melewatkan langkah-langkah yang tersisa. CloudFront tidak memampatkan objek lagi.

1. Jika asal mengembalikan objek yang tidak dikompresi ke CloudFront tanpa `Content-Encoding` header dalam respons HTTP, CloudFront kemudian menentukan apakah objek dapat dikompresi. Untuk informasi selengkapnya, lihat [Kondisi untuk kompresi](#compressed-content-cloudfront-notes).

1. Jika objek dapat dikompresi, CloudFront kompres, kirimkan ke penampil, dan kemudian menambahkannya ke cache. 

1. Jika ada permintaan penampil berikutnya untuk objek yang sama, CloudFront mengembalikan versi cache pertama. Misalnya, jika penampil meminta objek cache tertentu yang menggunakan kompresi Gzip, dan penampil *menerima* format Gzip, permintaan berikutnya ke objek yang sama akan selalu mengembalikan versi Gzip, bahkan jika penampil menerima Brotli dan Gzip.

Beberapa custom origin juga dapat mengompres objek. Asal Anda mungkin dapat mengompres objek yang CloudFront tidak dikompres. Untuk informasi selengkapnya, lihat [Jenis file yang CloudFront mengompres](#compressed-content-cloudfront-file-types).

## Kondisi untuk kompresi
<a name="compressed-content-cloudfront-notes"></a>

Daftar berikut memberikan informasi lebih lanjut tentang skenario di mana CloudFront tidak memampatkan objek.

**Permintaan menggunakan HTTP 1.0**  
Jika permintaan untuk CloudFront menggunakan HTTP 1.0, CloudFront menghapus `Accept-Encoding` header dan tidak memampatkan objek dalam respons.

**`Accept-Encoding`permintaan header**  
Jika `Accept-Encoding` header hilang dari permintaan penampil, atau jika tidak berisi `gzip` atau `br` sebagai nilai, CloudFront tidak akan memampatkan objek dalam respons. Jika `Accept-Encoding` header menyertakan nilai tambahan seperti`deflate`, CloudFront hapus sebelum meneruskan permintaan ke asal.  
Ketika CloudFront [dikonfigurasi untuk mengompres objek](#compressed-content-cloudfront-configuring), itu termasuk `Accept-Encoding` header di kunci cache dan permintaan asal secara otomatis.

**Konten sudah di-cache saat Anda mengonfigurasi CloudFront untuk mengompres objek**  
CloudFront memampatkan objek ketika mendapatkannya dari asal. Saat Anda mengonfigurasi CloudFront untuk mengompres objek, CloudFront tidak mengompres objek yang sudah di-cache di lokasi tepi. Selain itu, ketika objek yang di-cache kedaluwarsa di lokasi tepi dan CloudFront meneruskan permintaan lain untuk objek ke asal Anda, CloudFront tidak akan memampatkan objek saat asal Anda mengembalikan kode status HTTP 304. Ini berarti bahwa lokasi tepi sudah memiliki versi terbaru dari objek. Jika Anda ingin CloudFront mengompres objek yang sudah di-cache di lokasi tepi, Anda perlu membatalkan objek tersebut. Untuk informasi selengkapnya, lihat [Membatalkan file untuk menghapus konten](Invalidation.md).

**Origin sudah dikonfigurasi untuk mengompres objek**  
Jika Anda mengonfigurasi CloudFront untuk mengompres objek dan asal juga mengompres objek, asal harus menyertakan `Content-Encoding` header. Header ini menunjukkan CloudFront bahwa objek sudah dikompresi. Ketika respons dari asal menyertakan `Content-Encoding` header, CloudFront tidak memampatkan objek, terlepas dari nilai header. CloudFrontmengirimkan respons ke penampil dan menyimpan objek di lokasi tepi.

**Jenis file yang CloudFront mengompres**  
Untuk daftar lengkap, lihat [Jenis file yang CloudFront mengompres](#compressed-content-cloudfront-file-types).

**Ukuran benda yang CloudFront memampatkan**  
CloudFront memampatkan objek yang berukuran antara 1.000 byte dan 10.000.000 byte.

**Header `Content-Length`**  
Asal harus menyertakan `Content-Length` header dalam respons, yang CloudFront digunakan untuk menentukan apakah ukuran objek berada dalam kisaran yang CloudFront memampatkan. Jika `Content-Length` header hilang, berisi nilai yang tidak valid, atau berisi nilai di luar rentang ukuran yang CloudFront dikompres, CloudFront tidak akan memampatkan objek. Untuk informasi selengkapnya tentang cara CloudFront memproses objek besar yang dapat melebihi rentang ukuran, lihat[Bagaimana CloudFront memproses permintaan sebagian untuk suatu objek (rentang GETs)](RangeGETs.md).

**Kode status HTTP dari respons**  
CloudFront mengompres objek hanya ketika kode status HTTP dari respon adalah`200`,`403`, atau`404`.

**Respon tidak memiliki tubuh**  
Ketika respons HTTP dari asal tidak memiliki badan, tidak ada yang bisa dikompres. CloudFront 

**Header `ETag`**  
CloudFront terkadang memodifikasi `ETag` header dalam respons HTTP ketika memampatkan objek. Untuk informasi selengkapnya, lihat [`ETag`konversi header](#compressed-content-cloudfront-etag-header).

**CloudFront melompati kompresi**  
CloudFront mengompres objek dengan upaya terbaik. Dalam kasus yang jarang terjadi, CloudFront lompat mengompresi objek saat CloudFront mengalami beban lalu lintas yang tinggi. CloudFront membuat keputusan ini berdasarkan berbagai faktor, termasuk kapasitas host. Jika CloudFront melewatkan kompresi untuk suatu objek, itu akan menyimpan objek yang tidak dikompresi dan terus menyajikannya kepada pemirsa sampai objek kedaluwarsa, diusir, atau tidak valid.

## Jenis file yang CloudFront mengompres
<a name="compressed-content-cloudfront-file-types"></a>

Jika Anda mengonfigurasi CloudFront untuk mengompres objek, CloudFront hanya kompres objek yang memiliki salah satu nilai berikut di header `Content-Type` respons:
+ `application/dash+xml`
+ `application/eot`
+ `application/font`
+ `application/font-sfnt`
+ `application/javascript`
+ `application/json`
+ `application/opentype`
+ `application/otf`
+ `application/pdf`
+ `application/pkcs7-mime`
+ `application/protobuf`
+ `application/rss+xml`
+ `application/truetype`
+ `application/ttf`
+ `application/vnd.apple.mpegurl`
+ `application/vnd.mapbox-vector-tile`
+ `application/vnd.ms-fontobject`
+ `application/wasm`
+ `application/xhtml+xml`
+ `application/xml`
+ `application/x-font-opentype`
+ `application/x-font-truetype`
+ `application/x-font-ttf`
+ `application/x-httpd-cgi`
+ `application/x-javascript`
+ `application/x-mpegurl`
+ `application/x-opentype`
+ `application/x-otf`
+ `application/x-perl`
+ `application/x-ttf`
+ `font/eot`
+ `font/opentype`
+ `font/otf`
+ `font/ttf`
+ `image/svg+xml`
+ `text/css`
+ `text/csv`
+ `text/html`
+ `text/javascript`
+ `text/js`
+ `text/plain`
+ `text/richtext`
+ `text/tab-separated-values`
+ `text/xml`
+ `text/x-component`
+ `text/x-java-source`
+ `text/x-script`
+ `vnd.apple.mpegurl`

## `ETag`konversi header
<a name="compressed-content-cloudfront-etag-header"></a>

Ketika objek yang tidak dikompresi dari asal menyertakan header `ETag` HTTP yang valid dan kuat, dan CloudFront mengompres objek, CloudFront juga mengubah nilai `ETag` header yang kuat menjadi lemah`ETag`, dan mengembalikan nilai lemah ke penampil`ETag`. Penampil dapat menyimpan yang lemah `ETag` nilai dan penggunaannya untuk mengirim permintaan bersyarat dengan `If-None-Match` Header HTTP. Hal ini memungkinkan pemirsa CloudFront,, dan asal untuk memperlakukan versi objek yang dikompresi dan tidak terkompresi sebagai setara secara semantik, yang mengurangi transfer data yang tidak perlu.

Nilai `ETag` header yang valid dan kuat dimulai dan diakhiri dengan karakter kutipan ganda (`"`). Untuk mengonversi `ETag` yang bernilai rendah, CloudFront menambahkan karakter `W/` pada awal `ETag` yang sesuai.

Ketika objek dari asal menyertakan nilai `ETag` header yang lemah (nilai yang dimulai dengan karakter`W/`), CloudFront tidak mengubah nilai ini, dan mengembalikannya ke penampil seperti yang diterima dari asal.

Ketika objek dari asal menyertakan nilai `ETag` header yang tidak valid (nilai tidak dimulai dengan `"` atau dengan`W/`), CloudFront menghapus `ETag` header dan mengembalikan objek ke penampil tanpa header `ETag` respon.

Untuk informasi lebih lanjut, lihat halaman berikut di dokumen web MDN:
+ [Arahan](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#Directives) (`ETag` Header HTTP)
+ [Validasi lemah](https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests#Weak_validation) (Permintaan bersyarat HTTP)
+ [If-None-MatchHeader HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)