Pengantar
Kecepatan sebuah website tidak hanya ditentukan oleh spesifikasi server atau koneksi internet. Cara protokol jaringan mengirimkan banyak permintaan dalam satu koneksi juga memiliki pengaruh besar terhadap performa.
Pada era HTTP/1.1, browser sering membutuhkan beberapa koneksi TCP untuk mengambil berbagai resource seperti HTML, CSS, JavaScript, gambar, font, dan file lainnya. Kondisi tersebut dapat menambah overhead dan membuat proses pemuatan halaman menjadi kurang efisien.
HTTP/2 hadir dengan pendekatan yang berbeda. Salah satu fitur terpentingnya adalah multiplexing, yaitu kemampuan untuk menjalankan banyak pertukaran request dan response secara bersamaan melalui satu koneksi.
Menurut spesifikasi resmi IETF, HTTP/2 memungkinkan beberapa pertukaran komunikasi berlangsung secara bersamaan dalam satu koneksi dan setiap pertukaran tersebut dikaitkan dengan stream yang berbeda (dikutip dari: RFC 9113 – HTTP/2).
Teknologi inilah yang membuat HTTP/2 menjadi salah satu perubahan penting dalam evolusi protokol web.
Apa Itu HTTP/2 Multiplexing?
Pengertian Multiplexing
HTTP/2 multiplexing adalah mekanisme yang memungkinkan banyak request dan response berjalan secara bersamaan melalui satu koneksi HTTP/2.
Setiap komunikasi tersebut ditempatkan ke dalam sebuah stream.
Gambaran sederhananya:
HTTP/2 Connection
│
├── Stream 1 → HTML
├── Stream 3 → CSS
├── Stream 5 → JavaScript
├── Stream 7 → Image
├── Stream 9 → Font
└── Stream 11 → API
Semua stream tersebut dapat menggunakan koneksi yang sama.
Dengan demikian, browser tidak perlu membuat satu koneksi TCP terpisah untuk setiap resource.
baca juga : Privileged Identity Management (PIM): Strategi Mengamankan Akses Istimewa dari Ancaman Siber
HTTP/1.1 vs HTTP/2 Multiplexing
Model HTTP/1.1
Pada HTTP/1.1, browser dapat menggunakan beberapa koneksi untuk mengambil resource secara bersamaan.
Contohnya:
Browser
│
├── TCP Connection 1 → HTML
├── TCP Connection 2 → CSS
├── TCP Connection 3 → JavaScript
├── TCP Connection 4 → Image
└── TCP Connection 5 → Font
Setiap koneksi memiliki overhead tersendiri.
Walaupun HTTP/1.1 mendukung persistent connection dan pipelining, implementasi modern browser umumnya menggunakan beberapa koneksi untuk meningkatkan paralelisme.
Model HTTP/2
HTTP/2 mengubah pendekatan tersebut menjadi:
Browser
│
▼
One TCP Connection
│
┌──────┼──────────────┐
▼ ▼ ▼
Stream Stream Stream
1 3 5
HTML CSS JavaScript
Banyak stream dapat berjalan di dalam satu koneksi.
Inilah inti dari multiplexing.
Apa Itu HTTP/2 Stream?
Stream sebagai Jalur Logis
Stream merupakan urutan frame dua arah yang independen secara logis di dalam koneksi HTTP/2.
Setiap stream memiliki sebuah identifier.
Contohnya:
Stream 1
→ Request HTML
→ Response HTML
Stream 3
→ Request CSS
→ Response CSS
Stream 5
→ Request JavaScript
→ Response JavaScript
Menurut RFC 9113, sebuah koneksi HTTP/2 dapat memiliki banyak stream yang terbuka secara bersamaan dan frame dari stream yang berbeda dapat disisipkan satu sama lain (dikutip dari: RFC 9113 – Section 5, Streams and Multiplexing).
Bagaimana Multiplexing Bekerja?
Request Dipecah Menjadi Frame
HTTP/2 menggunakan format binary framing.
Data tidak dikirim sebagai satu blok HTTP/1.1 yang panjang, tetapi dibagi menjadi beberapa frame.
Contohnya:
HTTP Request
↓
┌──────────┐
│ HEADERS │
└──────────┘
↓
┌──────────┐
│ DATA │
└──────────┘
Frame tersebut kemudian diberi informasi mengenai stream yang terkait.
Frame dari Banyak Stream Dapat Disisipkan
Misalnya terdapat tiga stream:
Stream 1 → HTML
Stream 3 → CSS
Stream 5 → JavaScript
Pengiriman dapat terlihat seperti:
HEADERS Stream 1
DATA Stream 1
HEADERS Stream 3
DATA Stream 3
DATA Stream 1
HEADERS Stream 5
DATA Stream 5
DATA Stream 3
Artinya, data dari stream berbeda dapat diinterleave pada koneksi yang sama.
Tidak perlu menunggu seluruh response Stream 1 selesai sebelum Stream 3 atau Stream 5 dapat mengirimkan data.
Mengapa Multiplexing Membuat HTTP/2 Lebih Efisien?
Mengurangi Jumlah Koneksi
Dengan multiplexing, banyak request dapat berbagi satu koneksi.
HTTP/1.1
Client
├── Connection 1
├── Connection 2
├── Connection 3
└── Connection 4
HTTP/2
Client
│
▼
One Connection
├── Stream 1
├── Stream 3
├── Stream 5
└── Stream 7
Hal ini mengurangi kebutuhan untuk membuat dan mempertahankan banyak koneksi TCP.
Mengurangi Connection Overhead
Setiap koneksi membutuhkan proses tertentu sebelum data dapat dikirim secara optimal.
Jika menggunakan HTTPS, terdapat pula proses TLS.
Dengan menggunakan satu koneksi untuk banyak stream, overhead tersebut dapat digunakan bersama.
Hasilnya dapat membantu mengurangi latency dan meningkatkan efisiensi penggunaan jaringan.
Hubungan Multiplexing dengan Latency
Mengurangi Waktu Tunggu
Bayangkan sebuah halaman membutuhkan:
- 1 HTML
- 3 CSS
- 5 JavaScript
- 10 gambar
- 2 font
Jika setiap resource harus menunggu koneksi atau jalur komunikasi tertentu, proses pemuatan dapat menjadi lebih lambat.
Dengan HTTP/2:
Single Connection
│
├── HTML
├── CSS
├── JS
├── Image
└── Font
Resource dapat diproses secara lebih paralel.
MDN menjelaskan bahwa salah satu tujuan utama HTTP/2 adalah mengurangi latency dengan mendukung full request/response multiplexing dan prioritas request (dikutip dari: MDN – HTTP/2).
Multiplexing dan Head-of-Line Blocking
Apa Itu Head-of-Line Blocking?
Head-of-Line (HOL) blocking terjadi ketika data di bagian depan antrean menghambat data lain yang sebenarnya sudah siap diproses.
Pada HTTP/1.1 pipelining, masalah ini dapat terjadi karena response harus mengikuti urutan tertentu.
Contohnya:
Request A → Lambat
Request B → Cepat
Request C → Cepat
A menunggu
↓
B ikut tertahan
↓
C ikut tertahan
HTTP/2 mengatasi masalah tersebut pada level HTTP dengan memungkinkan frame dari stream berbeda disisipkan.
HTTP/2 Tidak Menghilangkan Semua HOL Blocking
Poin ini penting.
HTTP/2 multiplexing mengurangi application-level HOL blocking, tetapi HTTP/2 masih berjalan di atas TCP.
Jika terjadi kehilangan packet TCP, TCP harus melakukan retransmission dan menjaga urutan byte yang diterima.
Akibatnya, kehilangan packet pada satu koneksi TCP masih dapat berdampak terhadap data dari beberapa stream yang menggunakan koneksi tersebut.
Inilah salah satu alasan HTTP/3 menggunakan QUIC di atas UDP untuk menyediakan multiplexing pada transport layer dengan karakteristik yang berbeda.
Peran TCP dalam HTTP/2 Multiplexing
Satu Koneksi TCP
Secara umum, arsitektur HTTP/2 dapat digambarkan:
Application
│
HTTP/2
│
▼
TCP
│
▼
IP
Multiplexing dilakukan oleh HTTP/2 melalui stream.
Namun seluruh stream tersebut tetap menggunakan koneksi TCP yang sama.
Mengapa Ini Penting?
Karena jika koneksi TCP mengalami gangguan, beberapa stream yang berbagi koneksi tersebut dapat terkena dampaknya.
Contohnya:
TCP Connection
│
├── Stream 1
├── Stream 3
├── Stream 5
└── Stream 7
↓
Packet Loss
↓
TCP Retransmission
↓
Potential Delay
Jadi, multiplexing bukan berarti setiap stream memiliki koneksi jaringan yang benar-benar terpisah.
Stream hanya merupakan jalur logis di dalam satu koneksi.
HTTP/2 Frame dan Multiplexing
HEADERS Frame
Frame HEADERS membawa informasi header HTTP.
Contohnya secara konseptual:
HEADERS
├── :method
├── :path
├── :scheme
└── :authority
Frame ini dapat menjadi bagian awal dari sebuah request atau response.
baca juga : Software Bill of Materials (SBOM): Senjata Penting untuk Mengamankan Rantai Pasok Software
DATA Frame
DATA frame membawa payload.

Contohnya:
Stream 1
├── HEADERS
├── DATA
├── DATA
└── DATA
Data dari stream tersebut dapat diselingi dengan frame milik stream lain.
SETTINGS Frame
SETTINGS digunakan untuk bertukar parameter konfigurasi HTTP/2 antara endpoint.
Salah satu parameter penting berkaitan dengan jumlah stream yang dapat digunakan secara bersamaan.
RST_STREAM
RST_STREAM digunakan untuk menghentikan sebuah stream.
Hal menariknya adalah penghentian satu stream tidak harus berarti seluruh koneksi HTTP/2 dihentikan.
Contohnya:
Connection
├── Stream 1 → Active
├── Stream 3 → RST
├── Stream 5 → Active
└── Stream 7 → Active
Stream tertentu dapat dihentikan sementara stream lainnya tetap berjalan.
Multiplexing dan Flow Control
Mengapa Flow Control Dibutuhkan?
Multiplexing memungkinkan banyak stream mengirim data secara bersamaan.
Namun receiver memiliki kemampuan pemrosesan dan buffer yang terbatas.
Karena itu HTTP/2 menggunakan flow control.
Secara sederhana:
Sender
↓
DATA
↓
Receiver Buffer
↓
WINDOW_UPDATE
Receiver dapat mengontrol seberapa banyak data yang boleh dikirim.
RFC 9113 menjelaskan bahwa flow control digunakan untuk memastikan penggunaan stream multiplexed tetap efisien dengan membatasi data yang dikirim berdasarkan kemampuan receiver untuk menanganinya (dikutip dari: RFC 9113 – Flow Control).
Multiplexing dan Request Prioritization
Tidak semua resource memiliki tingkat kepentingan yang sama.
Contohnya:
HTML
↓
Critical CSS
↓
JavaScript
↓
Image
↓
Analytics
HTML dan CSS yang diperlukan untuk menampilkan halaman mungkin lebih penting daripada analytics.
HTTP/2 menyediakan mekanisme yang berkaitan dengan prioritas untuk membantu penggunaan resource yang terbatas secara lebih efektif.
Namun, perlu dipahami bahwa implementasi modern HTTP/2 memiliki perubahan terkait mekanisme prioritas dibandingkan spesifikasi HTTP/2 generasi awal.
Contoh Sederhana HTTP/2 Multiplexing
Bayangkan browser meminta tiga resource:
GET /index.html
GET /style.css
GET /app.js
Pada HTTP/2:
TCP Connection
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Stream 1 Stream 3 Stream 5
index.html style.css app.js
│ │ │
└─────────────┼─────────────┘
▼
HTTP/2
Frame dapat dikirim secara bergantian:
HEADERS S1
HEADERS S3
HEADERS S5
DATA S1
DATA S3
DATA S5
DATA S1
DATA S5
Semua tetap melewati koneksi yang sama.
Keuntungan HTTP/2 Multiplexing
1. Lebih Sedikit Koneksi
Banyak request dapat menggunakan satu koneksi.
2. Mengurangi Overhead
Handshake dan pengelolaan koneksi dapat lebih efisien.
3. Mengurangi Latency
Request tidak harus menunggu koneksi terpisah untuk setiap resource.
4. Paralelisme Lebih Baik
Banyak stream dapat aktif secara bersamaan.
5. Pemanfaatan Bandwidth Lebih Efisien
Frame dari berbagai stream dapat berbagi koneksi.
6. Cocok untuk Website Modern
Website modern biasanya membutuhkan banyak resource, sehingga multiplexing memberikan keuntungan yang signifikan.
baca juga : Consistent Hashing: Cara Membagi Data Secara Efisien di Sistem Terdistribusi
Apakah HTTP/2 Multiplexing Selalu Lebih Cepat?
Tidak Selalu
Multiplexing bukan jaminan bahwa setiap website otomatis menjadi lebih cepat.
Performa tetap dipengaruhi oleh:
- Latency jaringan.
- Packet loss.
- Bandwidth.
- Server.
- CDN.
- Ukuran resource.
- TLS.
- Browser.
- Konfigurasi HTTP/2.
- Kemampuan perangkat.
Misalnya, koneksi dengan packet loss tinggi masih dapat mengalami masalah karena HTTP/2 berjalan di atas TCP.
Server Tetap Harus Dioptimalkan
HTTP/2 tidak menggantikan kebutuhan optimasi server.
Beberapa hal yang tetap penting:
HTTP/2
+
Caching
+
Compression
+
CDN
+
Optimized Images
+
Efficient Backend
Kombinasi tersebut lebih efektif daripada hanya mengaktifkan HTTP/2 tanpa melakukan optimasi lainnya.
HTTP/2 Multiplexing vs HTTP/1.1
| Fitur | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Format | Text-based | Binary framing |
| Multiplexing | Tidak seperti HTTP/2 | Ya |
| Multiple Streams | Tidak | Ya |
| Header Compression | Tidak | HPACK |
| Single Connection | Bisa persistent | Dirancang untuk banyak stream |
| Parallel Request | Terbatas oleh model koneksi | Lebih efisien |
| Stream ID | Tidak | Ya |
| Flow Control | Terbatas pada mekanisme HTTP/1.1 | Per-stream & connection |
Perbedaan tersebut membuat HTTP/2 lebih cocok untuk pola komunikasi web modern yang membutuhkan banyak request secara bersamaan.
HTTP/2 Multiplexing vs HTTP/3
Persamaan
HTTP/2 dan HTTP/3 sama-sama mendukung multiplexing.
Keduanya memungkinkan banyak stream digunakan untuk komunikasi secara bersamaan.
HTTP/2
HTTP
↓
HTTP/2 Streams
↓
TCP
↓
IP
Sedangkan:
HTTP/3
HTTP
↓
HTTP/3 Streams
↓
QUIC
↓
UDP
↓
IP
Perbedaan Utama
Perbedaan penting terdapat pada transport layer.
HTTP/2 menggunakan TCP, sedangkan HTTP/3 menggunakan QUIC.
Akibatnya, HTTP/3 dirancang untuk mengurangi dampak transport-level head-of-line blocking yang masih dapat terjadi ketika HTTP/2 menggunakan satu koneksi TCP.
Dampak Multiplexing terhadap Pengembangan Website
Developer tidak perlu membuat sistem aplikasi khusus hanya untuk menggunakan konsep multiplexing.
HTTP/2 mempertahankan semantik HTTP sehingga metode seperti:
GET
POST
PUT
DELETE
PATCH
tetap digunakan.
Perubahan utama terjadi pada cara data dibingkai dan ditransmisikan di bawah HTTP.
Karena itu, banyak aplikasi web dapat memanfaatkan HTTP/2 tanpa perlu mengubah logika API secara besar-besaran.
Cara Mengetahui Website Menggunakan HTTP/2
Developer dapat memeriksa protokol yang digunakan melalui browser.
Pada Chrome atau browser berbasis Chromium, misalnya:
Developer Tools
↓
Network
↓
Protocol
Jika resource menggunakan HTTP/2, biasanya akan terlihat indikator seperti:
h2
Pengembang juga dapat menggunakan tools jaringan seperti curl untuk memeriksa dukungan HTTP/2 pada server.
baca juga : Cross-Site Request Forgery (CSRF): Cara Kerja Serangan dan Strategi Efektif untuk Melindungi Web
Kesimpulan
HTTP/2 Multiplexing merupakan salah satu fitur penting yang membuat HTTP/2 lebih efisien dibandingkan pendekatan HTTP/1.1 tradisional.
Dengan multiplexing, banyak request dan response dapat berjalan melalui satu koneksi TCP menggunakan stream yang berbeda. Data dari berbagai stream dapat dipecah menjadi frame dan dikirim secara bergantian melalui koneksi yang sama.
Pendekatan ini membantu mengurangi kebutuhan koneksi tambahan, menekan overhead, meningkatkan paralelisme, dan membantu mengurangi latency pada website yang memiliki banyak resource.
Namun, HTTP/2 multiplexing bukan berarti semua masalah performa jaringan otomatis hilang. Karena HTTP/2 masih menggunakan TCP, packet loss pada koneksi dapat tetap berdampak terhadap beberapa stream sekaligus.
Memahami konsep stream, frame, flow control, prioritization, TCP, dan head-of-line blocking menjadi penting untuk memahami mengapa HTTP/2 bekerja lebih efisien dan bagaimana HTTP/3 kemudian membawa konsep multiplexing tersebut ke lingkungan QUIC.
Dengan kata lain, jika HTTP/1.1 dapat dianalogikan seperti menggunakan beberapa jalur untuk mengirim barang, HTTP/2 mencoba membuat satu jalur yang lebih efisien dengan memungkinkan banyak aliran data berjalan secara bersamaan di dalamnya.








