HTTPQUERY
Bahasa Indonesia

Transfer-Encoding

Penggunaan

Header Transfer-Encoding adalah header hop-by-hop yang menjelaskan bagaimana body pesan dienkode untuk segmen koneksi saat ini. Setiap perantara (proxy, gateway) mendekode transfer encoding tersebut, memproses pesannya, lalu mengenkode ulang sebelum meneruskannya ke node berikutnya.

Nilai yang paling umum adalah chunked, yang memungkinkan server mulai melakukan streaming sebuah response sebelum mengetahui total Content-Length. Server memecah body menjadi beberapa chunk, masing-masing diawali dengan penunjuk ukuran. Sebuah chunk berukuran nol menandakan akhir pesan.

Berbeda dengan Content-Encoding yang menerapkan kompresi end-to-end pada sumber dayanya sendiri, Transfer-Encoding hanya bekerja di antara dua node yang bersebelahan. Server yang mengirim sumber daya terkompresi gzip melalui koneksi chunked menggunakan Content-Encoding untuk kompresi dan Transfer-Encoding untuk chunking.

Ketika Transfer-Encoding muncul pada response terhadap permintaan HTTP HEAD, nilainya mencerminkan encoding yang akan diterapkan server pada body dalam response GET yang bersesuaian.

Catatan

Content-Encoding bersifat end-to-end: sumber dayanya sendiri dikompresi (misalnya gzip) dan setiap penerima mendekode payload tersebut. Transfer-Encoding bersifat hop-by-hop: encoding diterapkan untuk pengangkutan antara dua node yang bersebelahan dan dilepas pada setiap hop. Sebuah response dapat membawa kedua header itu sekaligus, menggunakan Content-Encoding untuk kompresi sumber daya dan Transfer-Encoding untuk pengiriman chunked.

Catatan

Header Transfer-Encoding pada HTTP tidak berkaitan dengan Content-Transfer-Encoding pada email, yang menangani encoding MIME seperti base64 atau quoted-printable untuk body email.

Catatan

Header Transfer-Encoding dilarang pada HTTP/2 dan HTTP/3. Protokol-protokol tersebut menyediakan mekanisme framing data miliknya sendiri, sehingga encoding pada tingkat transfer menjadi tidak diperlukan.

chunked

Direktif chunked memecah body pesan menjadi serangkaian chunk. Setiap chunk diawali dengan ukuran chunk dalam heksadesimal, diikuti data chunk tersebut. Sebuah chunk terakhir berukuran nol mengakhiri pesan. Header Trailer mencantumkan field apa pun yang ditambahkan setelah chunk terakhir.

compress

Direktif compress menerapkan kompresi Lempel-Ziv-Welch (LZW). Encoding ini jarang digunakan pada penerapan modern.

deflate

Direktif deflate menerapkan kompresi zlib dengan algoritma deflate.

gzip

Direktif gzip menerapkan pengodean Lempel-Ziv (LZ77) dengan checksum CRC 32-bit. Algoritmanya sama dengan yang digunakan format berkas gzip dan didukung secara luas di berbagai implementasi HTTP.

Contoh

Sebuah server mengirim response chunked. Tidak adanya header Content-Length menandakan server sedang melakukan streaming body secara bertahap.

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
0\r\n
\r\n

Beberapa transfer encoding diterapkan secara berurutan. Pada response ini, body terlebih dahulu dikompresi dengan gzip lalu di-chunk untuk pengiriman.

Transfer-Encoding: gzip, chunked