

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

# Mengelola perilaku permintaan dan respons untuk distribusi Lightsail
<a name="amazon-lightsail-distribution-request-and-response"></a>

Dalam panduan ini, kami menjelaskan cara distribusi Amazon Lightsail Anda berperilaku saat memproses dan meneruskan permintaan ke asal Anda, dan memproses tanggapan dari asal Anda. Untuk informasi selengkapnya tentang distribusi, lihat [Distribusi jaringan pengiriman konten](amazon-lightsail-content-delivery-network-distributions.md).

**Topik**
+ [Bagaimana proses distribusi Anda dan meneruskan permintaan ke asal Anda](#distribution-process-and-forward-requests)
+ [Bagaimana distribusi Anda memproses tanggapan dari asal Anda](#distribution-process-responses)

## Bagaimana distribusi Anda memproses dan meneruskan permintaan ke tempat asal Anda
<a name="distribution-process-and-forward-requests"></a>

Bagian ini berisi informasi tentang bagaimana distribusi Anda memproses permintaan penampil dan meneruskan permintaan tersebut ke asal Anda.

**Daftar Isi**
+ [Autentikasi](#RequestCustomClientAuth)
+ [Durasi caching](#RequestCustomCaching)
+ [Alamat IP klien](#RequestCustomIPAddresses)
+ [Otentikasi SSL sisi klien](#RequestCustomClientSideSslAuth)
+ [Kompresi](#RequestCustomCompression)
+ [Permintaan bersyarat](#RequestCustomConditionalGETs)
+ [Cookie](#RequestCustomCookies)
+ [Berbagi sumber daya lintas asal (CORS)](#request-custom-cors)
+ [Enkripsi](#RequestCustomEncryption)
+ [DAPATKAN permintaan yang menyertakan badan](#RequestCustom-get-body)
+ [Metode HTTP](#RequestCustomHTTPMethods)
+ [Header permintaan HTTP dan perilaku distribusi](#request-custom-headers-behavior)
+ [Versi HTTP](#RequestCustomHTTPVersion)
+ [Panjang maksimum permintaan dan panjang maksimum URL](#RequestCustomMaxRequestStringLength)
+ [Penjepitan OCSP](#request-custom-ocsp-stapling)
+ [Koneksi persisten](#request-custom-persistent-connections)
+ [Protokol](#RequestCustomProtocols)
+ [String kueri](#RequestCustomQueryStrings)
+ [Batas waktu dan upaya koneksi asal](#custom-origin-timeout-attempts)
+ [Batas waktu respons asal](#request-custom-request-timeout)
+ [Permintaan simultan untuk objek yang sama (lonjakan lalu lintas)](#request-custom-traffic-spikes)
+ [Header user-agent](#request-custom-user-agent-header)

### Autentikasi
<a name="RequestCustomClientAuth"></a>

Untuk permintaan `DELETE`, `GET`, `HEAD`, `PATCH`, `POST`, dan `PUT`, jika Anda mengonfigurasi distribusi Anda untuk meneruskan header `Authorization` ke tempat asal Anda, Anda dapat mengonfigurasikan server asal untuk meminta autentikasi klien.

Untuk permintaan `OPTIONS`, Anda dapat mengonfigurasi server asal Anda untuk meminta autentikasi klien hanya jika Anda menggunakan pengaturan distribusi berikut:
+ Konfigurasi distribusi Anda untuk meneruskan header `Authorization` ke asal Anda.
+ Konfigurasi distribusi Anda untuk tidak meng-cache respons ke permintaan `OPTIONS`.

Anda dapat mengonfigurasi distribusi Anda untuk meneruskan permintaan ke asal Anda dengan menggunakan HTTP atau HTTPS.

### Durasi cache
<a name="RequestCustomCaching"></a>

Untuk mengontrol berapa lama objek Anda tetap berada di cache distribusi Anda sebelum distribusi Anda meneruskan permintaan lain ke asal Anda, Anda dapat:
+ Konfigurasi asal Anda untuk menambahkan `Cache-Control` atau `Expires` pada setiap objek.
+ Gunakan nilai default 1 hari untuk umur cache (TTL).

Untuk informasi lebih lanjut, [pengaturan lanjutan distribusi](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-changing-default-cache-behavior#changing-caching-behavior-distribution-advanced-settings).

### Alamat IP Klien
<a name="RequestCustomIPAddresses"></a>

Jika penampil mengirim permintaan ke distribusi Anda dan tidak menyertakan header permintaan `X-Forwarded-For`, distribusi Anda mendapatkan alamat IP penampil dari koneksi TCP, menambahkan header `X-Forwarded-For` yang menyertakan alamat IP, dan meneruskan permintaan ke asalnya. Sebagai contoh, jika distribusi Anda mendapatkan alamat IP `192.0.2.2` dari koneksi TCP, maka ia akan meneruskan header berikut ke asalnya:

`X-Forwarded-For: 192.0.2.2`

Jika penampil mengirim permintaan ke distribusi Anda dan menyertakan header permintaan `X-Forwarded-For`, distribusi Anda mendapatkan alamat IP penampil dari koneksi TCP, menambahkannya pada akhir header `X-Forwarded-For`, dan meneruskan permintaan ke asalnya. Sebagai contoh, jika permintaan penampil menyertakan `X-Forwarded-For: 192.0.2.4,192.0.2.3` dan distribusi Anda mendapatkan alamat IP `192.0.2.2` dari koneksi TCP, maka ia akan meneruskan header berikut ke asalnya:

`X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2`

Beberapa aplikasi, seperti penyeimbang beban, firewall aplikasi web, proksi balik, sistem pencegahan penyusupan, dan API Gateway, menambahkan alamat IP dari server edge distribusi yang meneruskan permintaan ke akhir header `X-Forwarded-For`. Sebagai contoh, jika distribusi Anda menyertakan `X-Forwarded-For: 192.0.2.2` dalam permintaan yang diteruskan ke ELB dan jika alamat IP server edge distribusi adalah 192.0.2.199, permintaan yang diterima oleh instans Anda berisi header berikut:

`X-Forwarded-For: 192.0.2.2,192.0.2.199`

**catatan**  
`X-Forwarded-For`Header berisi IPv4 alamat (seperti 192.0.2.44) dan IPv6 alamat (seperti 2001:0 db 8:85 a 3:0000:0000:8 a2e: 0370:7334).

### Auntentikasi SSL sisi-klien
<a name="RequestCustomClientSideSslAuth"></a>

Distribusi Lightsail tidak mendukung otentikasi klien dengan sertifikat SSL sisi klien. Jika asal meminta sertifikat sisi klien, maka distribusi Anda membuang permintaan tersebut. 

### Kompresi
<a name="RequestCustomCompression"></a>

Distribusi Lightsail meneruskan permintaan yang memiliki `Accept-Encoding` nilai bidang dan. `"identity"` `"gzip"`

### Permintaan bersyarat
<a name="RequestCustomConditionalGETs"></a>

Saat distribusi Anda menerima permintaan untuk objek yang telah kedaluwarsa dari edge cache, ia akan meneruskan permintaan ke asal Anda, baik untuk mendapatkan versi terbaru dari objek atau untuk mendapatkan konfirmasi dari asal di mana cache edge sudah memiliki versi terbaru. Biasanya, saat asal objek terakhir dikirim ke distribusi Anda, ia akan menyertakan nilai `ETag`, nilai `LastModified`, atau nilai keduanya dalam respons. Dalam permintaan baru yang diteruskan distribusi ke asal Anda, distribusi Anda menambahkan salah satu atau kedua hal berikut:
+ Header `If-Match` atau `If-None-Match` yang memuat `ETag` untuk versi objek yang kedaluwarsa.
+ Header `If-Modified-Since` yang memuat `LastModified` untuk versi objek yang kedaluwarsa.

Asal menggunakan informasi ini untuk menentukan apakah objek telah diperbarui dan, oleh karena itu, apakah akan mengembalikan seluruh objek ke distribusi Anda atau akan mengembalikan kode status HTTP 304 saja (tidak dimodifikasi).

### Cookie
<a name="RequestCustomCookies"></a>

Anda dapat mengonfigurasi distribusi Anda untuk meneruskan cookie ke asal Anda. Untuk informasi lebih lanjut, [pengaturan lanjutan distribusi](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-changing-default-cache-behavior#changing-caching-behavior-distribution-advanced-settings).

### Berbagi sumber daya lintas asal (CORS)
<a name="request-custom-cors"></a>

Jika Anda ingin distribusi Anda menghormati pengaturan berbagi sumber daya lintas-asal, konfigurasi asal Anda untuk meneruskan header `Origin` ke asal Anda.

### Enkripsi
<a name="RequestCustomEncryption"></a>

Anda dapat meminta pemirsa untuk terhubung ke distribusi Anda menggunakan HTTPS dan meminta distribusi Anda untuk meneruskan permintaan ke asal Anda dengan menggunakan HTTP atau HTTPS. 

Distribusi Anda meneruskan permintaan HTTPS ke asal Anda menggunakan protokol SSLv3, TLSv1 .0, TLSv1 .1, dan TLSv1 .2. Versi lain dari SSL dan TLS tidak didukung.

### Permintaan GET yang menyertakan tubuh
<a name="RequestCustom-get-body"></a>

Jika permintaan `GET` penampil menyertakan suatu tubuh, maka distribusi Anda akan mengembalikan kode status HTTP 403 (Terlarang) ke penampil tersebut.

### Metode HTTP
<a name="RequestCustomHTTPMethods"></a>

Jika Anda mengonfigurasi distribusi Anda untuk mengizinkan semua metode HTTP yang didukungnya, maka distribusi Anda akan menerima permintaan berikut dari penampil dan meneruskannya ke asal Anda:
+ `DELETE`
+ `GET`
+ `HEAD`
+ `OPTIONS`
+ `PATCH`
+ `POST`
+ `PUT`

Distribusi Anda selalu menyimpan dalam cache respons terhadap permintaan `GET` dan `HEAD`. Anda juga dapat mengonfigurasi distribusi Anda untuk menyimpan respons ke permintaan `OPTIONS`. Distribusi Anda tidak menyimpan dalam cache respons untuk permintaan yang menggunakan metode lain.

Untuk informasi tentang konfigurasi apakah asal Anda memproses metode ini, lihat dokumentasi untuk asal Anda.

**penting**  
Jika Anda mengonfigurasi distribusi Anda untuk menerima dan meneruskan semua metode HTTP yang didukungnya, konfigurasi server asal Anda untuk menangani semua metode. Sebagai contoh, jika Anda mengonfigurasi distribusi Anda untuk menerima dan meneruskan metode ini karena Anda ingin menggunakan `POST`, maka Anda harus mengonfigurasikan server asal Anda untuk menangani permintaan `DELETE` yang sesuai sehingga penampil tidak dapat menghapus sumber daya yang tidak Anda ingin hapus. Untuk informasi lebih lanjut, lihat dokumentasi untuk server HTTP Anda. 

### Header permintaan HTTP dan perilaku distribusi
<a name="request-custom-headers-behavior"></a>

Daftar berikut mencantumkan header permintaan HTTP yang dapat Anda teruskan ke asal Anda (dengan pengecualian yang dicatat). Untuk setiap header, daftar mencakup informasi tentang hal berikut:
+ **Didukung** - Apakah Anda dapat mengonfigurasi distribusi Anda untuk menyimpan objek berdasarkan nilai header untuk header tersebut. 

  Anda dapat mengonfigurasi distribusi Anda untuk menyimpan objek berdasarkan nilai di `Date` dan header `User-Agent`, tetapi kami tidak merekomendasikannya. Header ini memiliki banyak nilai yang mungkin, dan penyimpanan dalam cache berdasarkan nilainya akan membuat distribusi Anda untuk mengirimkan lebih banyak permintaan ke asal Anda.
+ **Perilaku jika tidak dikonfigurasi** - Perilaku distribusi Anda jika Anda tidak mengonfigurasinya untuk meneruskan header ke asal Anda, yang menyebabkan distribusi Anda untuk meng-cache objek Anda berdasarkan nilai header.
+ **Header** - Header yang ditetapkan lainnya

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Accept`

  **Di-support** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Accept-Charset`

  **Di-support** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Accept-Encoding`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Jika nilai berisi `gzip`, maka Distribusi Anda akan meneruskan `Accept-Encoding: gzip` ke asal Anda. Jika nilai tidak mengandung `gzip`, maka distribusi Anda akan menghapus bidang header `Accept-Encoding` sebelum meneruskan permintaan ke asal Anda.
+ **Header** - `Accept-Language`

  **Di-support** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Authorization`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi**:
  + `GET`dan `HEAD` permintaan — Distribusi Anda menghapus bidang `Authorization` header sebelum meneruskan permintaan ke asal Anda.
  + `OPTIONS`permintaan — Distribusi Anda menghapus bidang `Authorization` header sebelum meneruskan permintaan ke asal Anda jika Anda mengonfigurasi distribusi Anda ke respons cache terhadap `OPTIONS` permintaan.

    Distribusi Anda meneruskan kolom header `Authorization` ke asal Anda jika Anda tidak mengonfigurasi distribusi Anda untuk meng-cache respons ke permintaan OPTIONS.
  + `DELETE`,`PATCH`,`POST`, dan `PUT` permintaan — Distribusi Anda tidak menghapus bidang header sebelum meneruskan permintaan ke asal Anda.
+ **Header** - `Cache-Control`

  **Di-support** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke tempat asal Anda.
+ **Header** - `CloudFront-Forwarded-Proto`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda tidak akan menambahkan header sebelum meneruskan permintaan ke tempat asal Anda.
+ **Header** - `CloudFront-Is-Desktop-Viewer`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda tidak akan menambahkan header sebelum meneruskan permintaan ke tempat asal Anda.
+ **Header** - `CloudFront-Is-Mobile-Viewer`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda tidak akan menambahkan header sebelum meneruskan permintaan ke tempat asal Anda.
+ **Header** - `CloudFront-Is-Tablet-Viewer`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda tidak akan menambahkan header sebelum meneruskan permintaan ke tempat asal Anda.
+ **Header** - `CloudFront-Viewer-Country`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda tidak akan menambahkan header sebelum meneruskan permintaan ke tempat asal Anda.
+ **Header** - `Connection`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan mengganti header ini dengan `Connection: Keep-Alive` sebelum meneruskan permintaan ke asal Anda.
+ **Header** - `Content-Length`

  **Di-support** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke tempat asal Anda.
+ **Header** - `Content-MD5`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Content-Type`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Cookie`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Jika Anda mengonfigurasi distribusi Anda untuk meneruskan cookie, maka ia akan meneruskan kolom header `Cookie` ke asal Anda. Jika tidak, distribusi Anda akan menghapus kolom header `Cookie`.
+ **Header** - `Date`

  **Di-suppprt** - Ya, tetapi tidak disarankan

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Expect`

  **Di-support** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `From`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Host`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menetapkan nilai ke nama domain dari tempat asal yang berhubunan dengan objek yang diminta. 
+ **Header** - `If-Match`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `If-Modified-Since`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `If-None-Match`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `If-Range`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `If-Unmodified-Since`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Max-Forwards`

  **Di-support** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke tempat asal Anda.
+ **Header** - `Origin`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Pragma`

  **Di-support** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke tempat asal Anda.
+ **Header** - `Proxy-Authenticate`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Proxy-Authorization`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Proxy-Connection`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Range`

  **Didukung** - Ya, secara default

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Referer`

  **Di-support** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Request-Range`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - >Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `TE`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Trailer`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `Transfer-Encoding`

  **Di-support** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke tempat asal Anda.
+ **Header** - `Upgrade`

  **Didukung** - Tidak (kecuali untuk WebSocket koneksi)

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda menghapus header, kecuali Anda telah membuat WebSocket koneksi.
+ **Header** - `User-Agent`

  **Didukung** - Ya, tetapi tidak disarankan

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan mengganti nilai kolom header ini dengan `Amazon CloudFront`.
+ **Header** - `Via`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `Warning`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `X-Amz-Cf-Id`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menambahkan header ke permintaan penampil sebelum meneruskan permintaan ke asal Anda. Nilai header berisi deretan terenkripsi yang secara unik mengidentifikasi permintaan.
+ **Header** - `X-Edge-*`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus semua header `X-Edge-*`.
+ **Header** - `X-Forwarded-For`

  **Didukung** - Ya

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan meneruskan header ke asal Anda.
+ **Header** - `X-Forwarded-Proto`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.
+ **Header** - `X-Real-IP`

  **Didukung** - Tidak

  **Perilaku jika tidak dikonfigurasi** - Distribusi Anda akan menghapus header.

### Versi HTTP
<a name="RequestCustomHTTPVersion"></a>

Distribusi Anda meneruskan permintaan ke asal Anda dengan menggunakan HTTP/1.1.

### Lama maksimum panjang permintaan dan lama maksimum URL
<a name="RequestCustomMaxRequestStringLength"></a>

Lama maksimum permintaan, termasuk alur, string query (jika ada), dan header, adalah 20.480 byte.

Distribusi Anda membangun URL dari permintaan tersebut. Panjang maksimal URL ini adalah 8192 byte.

Jika permintaan atau URL melebihi jumlah maksimum ini, distribusi Anda akan mengembalikan kode status HTTP 413, Entitas Permintaan Terlalu Besar, ke penampil, lalu menghentikan koneksi TCP ke penampil.

### Pemasangan OCSP
<a name="request-custom-ocsp-stapling"></a>

Saat penampil mengirimkan permintaan HTTPS untuk objek, distribusi Anda atau penampil harus mengonfirmasi dengan otoritas sertifikasi (CA) bahwa sertifikat SSL untuk domain belum dicabut. OCSP mempercepat validasi sertifikat dengan memungkinkan distribusi Anda untuk memvalidasi sertifikat dan untuk menyimpan respons dari CA, sehingga klien tidak perlu memvalidasi sertifikat secara langsung dengan CA.

Peningkatan performa stapling OCSP lebih jelas ketika distribusi Anda menerima banyak permintaan HTTPS untuk objek dalam domain yang sama. Setiap server di lokasi edge distribusi harus mengirimkan permintaan validasi terpisah. Saat distribusi Anda menerima banyak permintaan HTTPS untuk domain yang sama, setiap server di lokasi edge akan segera memiliki respons dari CA yang dapat "menempatkan" ke paket dalam jabat tangan SSL; ketika penampil menyatakan bahwa sertifikat valid, distribusi Anda dapat menyajikan objek yang diminta. Jika distribusi Anda tidak terlalu banyak mendapatkan traffic di lokasi edge, maka permintaan baru sangat mungkin diarahkan ke server yang belum memvalidasi sertifikat dengan CA. Dalam hal ini, penampil melakukan langkah validasi secara terpisah dan server distribusi menyajikan objek. Karena server distribusi juga mengirimkan permintaan validasi ke CA, maka saat berikutnya server menerima permintaan yang menyertakan nama domain yang sama, server tersebut akan memiliki respons validasi dari CA.

### Koneksi persisten
<a name="request-custom-persistent-connections"></a>

Saat distribusi Anda mendapatkan respons dari asal Anda, ia akan mencoba menjaga koneksi selama beberapa detik jika permintaan lain muncul selama periode tersebut. Menjaga koneksi yang persisten menghemat waktu yang dibutuhkan untuk memulai kembali koneksi TCP dan melakukan handshake TLS lain untuk permintaan berikutnya.

### Protokol
<a name="RequestCustomProtocols"></a>

Distribusi Anda meneruskan permintaan HTTP atau HTTPS ke server asal berdasarkan nilai bidang **kebijakan protokol Origin** di konsol Lightsail. **Di konsol Lightsail, opsinya hanya **HTTP, dan HTTPS** saja.** 

Jika Anda menentukan **HTTP Saja** atau **HTTPS Saja**, maka distribusi Anda akan meneruskan permintaan ke asal Anda menggunakan protokol yang ditentukan, apapun protokol yang ada dalam permintaan penampil.

**penting**  
Jika distribusi Anda meneruskan permintaan ke asal Anda dengan menggunakan protokol HTTPS, dan jika server asal mengembalikan sertifikat yang tidak valid atau sertifikat yang ditandatangani sendiri, maka distribusi Anda akan membuang koneksi TCP.

### String pertanyaan
<a name="RequestCustomQueryStrings"></a>

Anda dapat mengonfigurasi apakah distribusi meneruskan parameter string kueri ke asal Anda. 

### Waktu habis dan upaya koneksi asal
<a name="custom-origin-timeout-attempts"></a>

Secara default, distribusi Anda menunggu selama 30 detik (3 kali percobaan, masing-masing selama 10 detik) sebelum mencoba untuk mengembalikan respons kesalahan ke penampil.



### Waktu habis untuk respons asal
<a name="request-custom-request-timeout"></a>

*waktu habis respons asal*, juga dikenal sebagai *waktu habis baca asal* atau *waktu habis permintaan asal*, berlaku untuk kedua hal berikut:
+ Jumlah waktu, dalam detik, yang dihabiskan distribusi Anda untuk menunggu respons setelah meneruskan permintaan ke asal.
+ Jumlah waktu, dalam detik, yang dihabiskan distribusi Anda untuk menunggu setelah menerima paket respons dari asal dan sebelum menerima paket berikutnya.

Perilaku distribusi Anda tergantung pada metode HTTP permintaan penampil:
+ `GET`dan `HEAD` permintaan — Jika asal tidak merespons atau berhenti merespons dalam durasi waktu tunggu respons, distribusi Anda akan menghentikan koneksi. Jika jumlah upaya koneksi asal yang ditentukan adalah lebih dari 1, maka distribusi Anda akan mencoba lagi untuk mendapatkan respons yang lengkap. Distribusi Anda mencoba hingga 3 kali, sebagaimana ditentukan oleh nilai pada pengaturan *upaya koneksi asal*. Jika asal tidak merespons selama upaya terakhir, distribusi Anda tidak akan mencoba lagi sampai menerima permintaan lain untuk konten pada asal yang sama. 
+ `DELETE`,`OPTIONS`,`PATCH`,`PUT`, dan `POST` permintaan — Jika asal tidak merespons dalam 30 detik, distribusi Anda akan menghentikan koneksi dan tidak mencoba lagi untuk menghubungi asal. Klien dapat mengirim ulang permintaan bilamana perlu.

### Permintaan objek yang sama secara bersamaan (lonjakan traffic)
<a name="request-custom-traffic-spikes"></a>

Saat lokasi edge distribusi menerima permintaan objek dan baik objek saat ini tidak ada dalam cache atau objek telah kedaluwarsa, maka distribusi Anda akan segera mengirimkan permintaan ke asal Anda. Jika ada lonjakan lalu lintas—jika permintaan tambahan untuk objek yang sama tiba di lokasi tepi sebelum asal Anda merespons permintaan pertama—distribusi Anda berhenti sebentar sebelum meneruskan permintaan tambahan untuk objek ke asal Anda. Biasanya, respons terhadap permintaan pertama akan sampai di lokasi edge distribusi sebelum respons terhadap permintaan berikutnya. Jeda singkat ini membantu mengurangi beban yang tidak perlu di server asal Anda. Jika permintaan tambahan tidak identik karena, misalnya, Anda telah mengonfigurasi untuk meng-cache berdasarkan header atau cookie permintaan, maka distribusi Anda akan meneruskan semua permintaan unik ke asal Anda.

### Header agen-pengguna
<a name="request-custom-user-agent-header"></a>

Jika Anda ingin distribusi Anda meng-cache versi objek yang berbeda berdasarkan perangkat yang digunakan pengguna untuk melihat konten Anda, sebaiknya Anda konfigurasi distribusi Anda untuk meneruskan satu atau beberapa header berikut ke asal Anda:
+ `CloudFront-Is-Desktop-Viewer`
+ `CloudFront-Is-Mobile-Viewer`
+ `CloudFront-Is-SmartTV-Viewer`
+ `CloudFront-Is-Tablet-Viewer`

Berdasarkan nilai header `User-Agent`, distribusi Anda menetapkan nilai header ini menjadi `true` atau `false` sebelum meneruskan permintaan ke asal Anda. Jika perangkat termasuk dalam lebih dari satu kategori, lebih dari satu nilai mungkin `true`. Misalnya, untuk beberapa perangkat tablet, distribusi Anda mungkin mengatur `CloudFront-Is-Mobile-Viewer` dan `CloudFront-Is-Tablet-Viewer` ke `true`.

Anda dapat mengonfigurasi distribusi Anda untuk meng-cache objek berdasarkan nilai di header `User-Agent`, tetapi kami tidak merekomendasikannya. Header `User-Agent` memiliki banyak nilai yang mungkin, dan melakukan cache berdasarkan nilai tersebut akan menyebabkan distribusi Anda mengirimkan lebih banyak permintaan ke asal Anda. 

Jika Anda tidak mengonfigurasi distribusi Anda untuk meng-cache objek berdasarkan nilai di header `User-Agent`, maka distribusi Anda akan menambahkan header `User-Agent` dengan nilai berikut sebelum meneruskan permintaan ke asal Anda:

`User-Agent = Amazon CloudFront`

Distribusi Anda menambahkan header ini terlepas dari apakah permintaan dari penampil menyertakan header `User-Agent`. Jika permintaan dari penampil mencakup header `User-Agent`, distribusi Anda akan menghapusnya.

## Cara distribusi Anda memproses respons dari asal Anda
<a name="distribution-process-responses"></a>

Topik ini berisi informasi tentang bagaimana distribusi Anda memproses respons dari asal Anda.

**Daftar Isi**
+ [100-Lanjutkan tanggapan](#Response100Continue)
+ [Caching](#ResponseCustomCaching)
+ [Permintaan yang dibatalkan](#response-custom-canceled-requests)
+ [Negosiasi konten](#ResponseCustomContentNegotiation)
+ [Cookie](#ResponseCustomCookies)
+ [Koneksi TCP terputus](#ResponseCustomDroppedTCPConnections)
+ [Header respons HTTP yang dihapus atau digantikan oleh distribusi Anda](#ResponseCustomRemovedHeaders)
+ [Ukuran file maksimal](#ResponseCustomMaxFileSize)
+ [Asal tidak tersedia](#ResponseCustomOriginUnavailable)
+ [Pengalihan](#ResponseCustomRedirects)
+ [Transfer pengkodean](#ResponseCustomTransferEncoding)

### Respons 100-Continue
<a name="Response100Continue"></a>

Asal Anda tidak dapat mengirim lebih dari satu respons 100-Continue ke distribusi Anda. Setelah respons 100-Continue yang pertama, distribusi Anda mengharapkan respons HTTP 200 OK. Jika asal Anda mengirim respons 100-Continue lagi setelah respons pertama, maka distribusi Anda akan mengembalikan kesalahan.

### Pembuatan cache
<a name="ResponseCustomCaching"></a>
+ Pastikan asal Anda menetapkan nilai yang valid dan akurat untuk kolom header `Date` dan `Last-Modified`.
+ Jika permintaan dari penampil mencakup `If-Match` atau `If-None-Match` bidang header permintaan, atur `ETag` kolom header respons. Jika Anda tidak menentukan nilai `ETag`, distribusi Anda akan mengabaikan header `If-Match` atau `If-None-Match` berikutnya.
+ Distribusi Anda biasanya menghormati header `Cache-Control: no-cache` yang dalam respons dari asal. Untuk pengecualian, lihat [Permintaan bersamaan untuk objek yang sama (lonjakan lalu lintas)](#request-custom-traffic-spikes).

### Permintaan dibatalkan
<a name="response-custom-canceled-requests"></a>

Jika suatu objek tidak berada di cache edge, dan jika sebuah penampil mengakhiri sesi (misalnya, menutup browser) setelah distribusi Anda mendapatkan objek dari asal Anda tetapi sebelum dapat mengirimkan objek yang diminta, distribusi Anda tidak akan menyimpan objek di lokasi edge.

### Negosiasi konten
<a name="ResponseCustomContentNegotiation"></a>

Jika asal Anda mengembalikan `Vary:*` dalam respons, dan jika nilai **TTL Minimum** untuk perilaku cache terkait adalah **0**, maka distribusi Anda akan menyimpan objek dalam cache tetapi masih meneruskan setiap permintaan berikutnya untuk objek ke asal objek guna mengonfirmasi bahwa cache tersebut berisi objek versi terbaru. Distribusi Anda tidak menyertakan header bersyarat apa pun, seperti `If-None-Match` atau `If-Modified-Since`. Akibatnya, asal Anda mengembalikan objek ke distribusi Anda sebagai tanggapan atas setiap permintaan. 

Jika asal Anda kembali `Vary:*` dalam respons, dan jika nilai **TTL Minimum** untuk perilaku cache yang sesuai adalah nilai lainnya, CloudFront proses `Vary` header seperti yang dijelaskan dalam [header respons HTTP yang dihapus atau digantikan oleh distribusi Anda](#ResponseCustomRemovedHeaders). 

### Cookie
<a name="ResponseCustomCookies"></a>

Jika Anda mengaktifkan cookie untuk perilaku cache, dan jika asal mengembalikan cookie dengan sebuah objek, maka distribusi Anda akan menyimpan objek dan cookie dalam cache. Perhatikan bahwa ini mengurangi kemampuan cache untuk suatu objek.

### Koneksi TCP yang terhenti
<a name="ResponseCustomDroppedTCPConnections"></a>

Jika koneksi TCP antara distribusi Anda dan asal Anda putus saat asal Anda mengembalikan objek ke distribusi Anda, maka perilaku distribusi Anda tergantung pada apakah asal Anda menyertakan header `Content-Length` dalam respons tersebut:
+ **Header Content-Length** - Distribusi Anda mengembalikan objek ke penampil karena mendapatkan objek dari asal Anda. Namun, jika nilai header `Content-Length` tidak cocok dengan ukuran objek tersebut, maka distribusi Anda tidak menyimpan objek tersebut dalam cache.
+ **Transfer-Encoding: Chunked** — Distribusi Anda mengembalikan objek ke penampil karena mendapatkan objek dari asal Anda. Namun, jika respons terlempar yang diberikan tersebut tidak lengkap, maka distribusi Anda tidak akan menyimpan objek dalam cache.
+ **Tanpa header Content-Length** - Distribusi Anda mengembalikan objek ke penampil dan men-cache, tetapi objek mungkin tidak lengkap. Tanpa header `Content-Length`, distribusi Anda tidak dapat menentukan apakah koneksi TCP diputus secara tidak sengaja atau dengan sengaja.

Kami menyarankan agar Anda mengonfigurasi server HTTP Anda untuk menambahkan header `Content-Length` untuk mencegah distribusi Anda menyimpan sebagian objek dalam cache.

### Header respons HTTP yang dihapus atau diganti distribusi Anda
<a name="ResponseCustomRemovedHeaders"></a>

Distribusi Anda menghapus atau memperbarui kolom header berikut sebelum meneruskan respons dari asal Anda tersebut ke penampil:
+ `Set-Cookie`— Jika Anda mengonfigurasi distribusi Anda untuk meneruskan cookie, itu akan meneruskan bidang `Set-Cookie` header ke klien.
+ `Trailer`
+ `Transfer-Encoding`— Jika asal Anda mengembalikan bidang header ini, distribusi Anda akan menetapkan nilainya `chunked` sebelum mengembalikan respons ke penampil.
+ `Upgrade`
+ `Vary` – Catat hal berikut:
  + Jika Anda mengonfigurasi distribusi Anda untuk meneruskan header khusus perangkat ke asal Anda (`CloudFront-Is-Desktop-Viewer`, `CloudFront-Is-Mobile-Viewer`, `CloudFront-Is-SmartTV-Viewer`, `CloudFront-Is-Tablet-Viewer`) dan Anda mengonfigurasi asal Anda untuk mengembalikan `Vary:User-Agent` ke distribusi Anda, maka distribusi Anda tersebut akan mengembalikan `Vary:User-Agent` ke penampil.
  + Jika Anda mengonfigurasi asal Anda untuk menyertakan `Accept-Encoding` atau `Cookie` dalam header `Vary`, maka distribusi Anda akan menyertakan nilai tersebut dalam respons untuk penampil.
  + Jika Anda mengonfigurasi distribusi untuk meneruskan daftar header yang diizinkan ke asal Anda, dan jika Anda mengonfigurasi asal Anda untuk mengembalikan nama header ke distribusi Anda di `Vary` header (misalnya,`Vary:Accept-Charset,Accept-Language`), Distribusi Anda mengembalikan `Vary` header dengan nilai-nilai tersebut ke penampil.
  + Untuk informasi tentang bagaimana distribusi Anda memproses nilai `*` dalam header `Vary`, lihat [Negosiasi konten](#ResponseCustomContentNegotiation).
  + Jika Anda mengonfigurasi asal Anda untuk menyertakan nilai lain dalam header `Vary`, distribusi Anda akan menghapus nilai sebelum mengembalikan respons ke penampil.
+ `Via`— Distribusi Anda menetapkan nilai sebagai berikut dalam respons terhadap penampil:

  `Via: `*http-version* *alphanumeric-string*`.cloudfront.net (CloudFront)`

  Misalnya, jika klien membuat permintaan melalui HTTP/1.1, nilainya adalah sesuatu seperti berikut ini:

  `Via: 1.1 1026589cc7887e7a0dc7827b4example.cloudfront.net (CloudFront)`

### Ukuran maksimum file
<a name="ResponseCustomMaxFileSize"></a>

Ukuran maksimum badan respons yang akan dikembalikan oleh distribusi Anda ke penampil adalah sebesar 20 GB. Ini termasuk respons transfer yang dipotong yang tidak menyebutkan nilai header `Content-Length`.

### Tempat asal tidak tersedia
<a name="ResponseCustomOriginUnavailable"></a>

Jika server asal Anda tidak tersedia dan distribusi Anda mendapatkan permintaan untuk objek yang berada di cache edge tetapi objek tersebut telah kedaluwarsa (misalnya, karena periode waktu yang ditentukan dalam petunjuk `Cache-Control max-age` telah terlewati), maka distribusi Anda akan menyajikan versi objek kedaluwarsa atau menyajikan halaman kesalahan kustom.

Dalam beberapa kasus, sebuah objek yang jarang diminta akan digali dan tidak lagi tersedia di cache edge. Distribusi Anda tidak dapat menyajikan objek yang sudah dikosongkan.

### Mengalihkan
<a name="ResponseCustomRedirects"></a>

Jika Anda mengubah lokasi objek di server asal Anda, maka Anda dapat mengonfigurasi server web Anda untuk mengalihkan permintaan ke lokasi baru. Setelah Anda mengonfigurasi pengalihan, pada saat penampil mengirimkan permintaan untuk objek untuk pertama kalinya, distribusi Anda akan mengirim permintaan ke asal, dan asal akan menjawab dengan pengalihan (misalnya, `302 Moved Temporarily`). Distribusi Anda akan menyimpan dalam cache pengalihan tersebut dan mengembalikannya ke penampil. Distribusi Anda tidak mengikuti pengalihan.

Anda dapat mengonfigurasi server web untuk mengalihkan permintaan ke salah satu lokasi berikut:
+ URL baru objek di server asal. Saat penampil mengikuti pengalihan ke URL baru, penampil akan melewatkan distribusi Anda dan langsung menuju ke asal. Oleh karena itu, kami menyarankan agar Anda tidak mengalihkan permintaan ke URL baru dari objek tersebut di tempat asal.
+ URL distribusi baru untuk objek. Saat penampil mengirimkan permintaan yang berisi URL distribusi baru, distribusi Anda mendapatkan objek dari lokasi baru di asal Anda, menyimpannya di lokasi edge, dan mengembalikan objek ke penampil. Permintaan berikutnya atas objek tersebut akan dilayani oleh lokasi edge. Ini menghindari latensi dan beban yang terkait dengan penampil yang meminta objek dari asal. Namun, setiap permintaan baru atas objek tersebut akan dikenai biaya untuk dua permintaan ke distribusi Anda.

### Mentransfer pengodean
<a name="ResponseCustomTransferEncoding"></a>

Distribusi Lightsail hanya mendukung nilai header`chunked`. `Transfer-Encoding` Jika asal Anda mengembalikan `Transfer-Encoding: chunked`, maka distribusi Anda akan mengembalikan objek tersebut kepada klien saat objek tersebut diterima di lokasi edge, dan menyimpan objek tersebut dalam cache dalam format terpotong untuk permintaan selanjutnya.

Jika penampil membuat permintaan `Range GET` dan asal mengembalikan `Transfer-Encoding: chunked`, maka distribusi Anda akan mengembalikan seluruh objek tersebut ke penampil, alih-alih rentang yang diminta.

Kami sarankan agar Anda menggunakan pengkodean bertahap jika panjang konten tanggapan Anda tidak dapat ditentukan lebih dulu. Untuk informasi selengkapnya, lihat [Koneksi TCP yang Terputus](#ResponseCustomDroppedTCPConnections).