ERR_HTTP2_PROTOCOL_ERROR: Arti dan Cara Mengatasinya

Advertisement
Apa Itu ERR_HTTP2_PROTOCOL_ERROR?
ERR_HTTP2_PROTOCOL_ERROR adalah error Chrome dan Edge yang berarti browser menerima respons HTTP/2 yang melanggar aturan protokol. Di Chromium, ini adalah net error -337: "there is an HTTP/2 protocol error". Chrome tidak punya halaman error khusus untuk kode ini, jadi yang muncul adalah halaman generik: "Situs ini tidak dapat dijangkau" (This site can't be reached), dengan keterangan bahwa halaman web tersebut mungkin sedang tidak aktif untuk sementara atau telah dipindahkan secara permanen ke alamat web baru, lalu ERR_HTTP2_PROTOCOL_ERROR di bawahnya.
HTTP/2 adalah versi HTTP yang lebih cepat dan kini dipakai sebagian besar situs HTTPS. Protokol ini lebih ketat daripada HTTP/1.1: respons dipecah menjadi frame biner, header mengikuti aturan yang presisi, dan ukuran respons yang dideklarasikan harus sama dengan yang benar-benar tiba. Ketika Chrome melihat respons yang melanggar aturan itu, misalnya respons yang berhenti di tengah jalan atau memuat header terlarang, seluruh respons dianggap rusak (malformed) dan dibuang.
Developer sering melihatnya di konsol DevTools sebagai net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK). Kombinasi itu adalah petunjuk kuat: server menjawab 200, tetapi body respons tidak pernah tiba dengan utuh.
Apa yang Dianggap Rusak oleh HTTP/2
Standar HTTP/2 (RFC 9113) mendaftar kesalahan yang membuat sebuah respons dianggap rusak (malformed), dan stream yang di-reset sebelum selesai juga dianggap gagal. Inilah masalah di balik sebagian besar error yang terjadi di dunia nyata:
| Aturan | Yang melanggarnya |
|---|---|
| Content-Length harus sama dengan ukuran body | Server atau plugin mendeklarasikan satu ukuran tetapi mengirim ukuran lain, misalnya saat output dikompres setelah panjangnya ditetapkan |
| Respons harus berakhir dengan bersih | Server, proxy, atau aplikasi berhenti mengirim di tengah jalan |
| Tidak boleh ada header khusus koneksi | Connection, Keep-Alive, Proxy-Connection, Transfer-Encoding, atau Upgrade dikirim dalam respons HTTP/2 |
| Nama field harus huruf kecil | Nama header berhuruf kapital yang diteruskan begitu saja ke HTTP/2 |
| Nilai header harus valid | Baris baru atau karakter terlarang lain di dalam nilai header |
| Baris :status yang valid | Kode status yang hilang atau tidak bisa dibaca |
Advertisement
Apa Penyebab ERR_HTTP2_PROTOCOL_ERROR?
Sebagian besar kasus berasal dari sisi server, tetapi beberapa hal di komputer Anda sendiri bisa merusak respons dalam perjalanannya:
Di server: respons yang terpotong di tengah jalan (proxy yang kehabisan ruang disk atau tidak bisa menulis file temp-nya, aplikasi yang crash saat streaming, timeout), nilai Content-Length yang salah, header yang terlarang atau tidak valid, serta dukungan HTTP/2 yang bermasalah di konfigurasi server atau CDN yang lebih lama.
Di sisi Anda: antivirus atau firewall yang memeriksa HTTPS dan menulis ulang respons, ekstensi browser yang mengubah permintaan atau respons, salinan halaman di cache yang rusak, dan sesekali versi Chrome yang usang.
Solusi 1: Hard Reload dan Coba Incognito
Tekan Ctrl + Shift + R (Mac: Cmd + Shift + R) untuk memuat ulang tanpa cache. Respons yang sekali terpotong mungkin tiba dengan utuh pada percobaan berikutnya.
Lalu buka halaman di jendela Incognito (Ctrl + Shift + N, Mac Cmd + Shift + N). Incognito tidak memakai cookie maupun cache dari profil normal Anda, dan ekstensi nonaktif secara default. Jika halaman terbuka di sana, Solusi 2 atau Solusi 3 akan mengatasinya di jendela normal Anda.
Advertisement
Solusi 2: Hapus Cache dan Cookie Situs Itu
Salinan cache yang rusak atau cookie yang membengkak bisa memicu error ini berulang kali di satu situs. Hapus data situs itu saja: klik ikon di sebelah kiri address bar → Cookie dan data situs (atau Setelan situs) → hapus datanya, lalu muat ulang. Untuk pembersihan yang lebih luas, tekan Ctrl + Shift + Delete lalu hapus Gambar dan file dalam cache untuk beberapa hari terakhir.
Solusi 3: Jeda Pemindaian HTTPS Antivirus dan Ekstensi
Perangkat lunak keamanan yang mendekripsi dan memeriksa HTTPS berada di tengah setiap koneksi HTTP/2. Jika penanganan HTTP/2-nya bermasalah atau usang, perangkat lunak itu bisa meneruskan respons yang dianggap rusak oleh Chrome. Matikan hanya fitur pemindaian HTTPS-nya (sering bernama HTTPS scanning, Web Shield, SSL/TLS protocol filtering, atau Scan encrypted connections) lalu muat ulang. Jika itu mengatasinya, perbarui antivirus dan tambahkan pengecualian untuk situs tersebut.
Selanjutnya, nonaktifkan semua ekstensi di chrome://extensions, muat ulang, lalu aktifkan kembali satu per satu. Pemblokir iklan, alat privasi, dan apa pun yang mengedit header adalah tersangka yang biasa.
Advertisement
Solusi 4: Perbarui Chrome dan Coba Browser Lain
Buka chrome://settings/help untuk memasang pembaruan yang tertunda, lalu restart browser. Setelah itu buka halaman yang sama di Firefox atau Safari. Jika gagal di semua browser, situsnya yang rusak dan hanya pemiliknya yang bisa memperbaikinya. Jika hanya Chrome atau Edge yang gagal, penyebabnya biasanya tetap situs itu, karena Chrome paling ketat menolak HTTP/2 yang rusak, tetapi Solusi 2 dan 3 layak diulang.
Solusi 5: Uji Halaman Tanpa HTTP/2
Chrome bisa dijalankan dengan HTTP/2 dimatikan, sehingga Anda tahu pasti apakah HTTP/2 penyebabnya. Tutup semua jendela Chrome terlebih dahulu, lalu jalankan dari terminal:
# Windows (Command Prompt)
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-http2
# macOS (Terminal)
open -a "Google Chrome" --args --disable-http2Jika halaman terbuka di jendela itu, respons HTTP/2 situs tersebut rusak dan pemiliknya perlu memperbaikinya. Tutup Chrome lalu buka kembali seperti biasa setelahnya. Flag ini hanya berlaku untuk satu kali peluncuran itu.
Advertisement
Untuk Pemilik Situs: Mengatasi Error Protokol HTTP/2
Jika pengunjung di jaringan dan browser yang berbeda-beda melaporkan error ini, masalahnya ada di stack Anda. Tiga pemeriksaan berikut menemukan hampir semua penyebabnya.
1. Reproduksi dengan curl
# HTTP/2: perhatikan bagian akhir output
curl -sv --http2 https://example.com/broken-page -o /dev/null
# Stream yang rusak berakhir dengan pesan seperti:
# HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)
# (curl 8.19+: HTTP/2 stream 1 reset by server (error 0x1 PROTOCOL_ERROR))
# URL yang sama lewat HTTP/1.1 sebagai pembanding
curl -sv --http1.1 https://example.com/broken-page -o /dev/nullJika HTTP/1.1 berhasil dan HTTP/2 gagal, error tersebut sudah terkonfirmasi. Bandingkan header respons dari keduanya, dan catat berapa byte yang tiba sebelum stream terputus. Alat HTTP Headers juga menampilkan header yang dikirim situs Anda jika dilihat dari luar jaringan Anda.
2. Periksa Respons yang Terpotong di Tengah Jalan
Penyebab paling umum di sisi server adalah respons yang sudah dimulai (status 200, header terkirim) lalu berhenti lebih awal. nginx menampung respons besar dari aplikasi Anda ke dalam file sementara, dan jika disk penuh atau nginx tidak bisa menulis ke folder temp-nya, respons berakhir lebih awal dan browser melaporkan error protokol. Periksa:
df -h # apakah ada disk yang penuh?
sudo grep -E "No space left|Permission denied" /var/log/nginx/error.log | tail
ls -ld /var/lib/nginx/proxy /var/lib/nginx/fastcgi # folder temp di Debian/Ubuntu; pemiliknya harus sama dengan user nginxPeriksa juga aplikasinya: proses PHP atau Node yang crash, timeout, atau mencapai batas memori saat men-streaming halaman besar atau unduhan menghasilkan hal yang sama. Log aplikasi di sekitar waktu error biasanya memperlihatkannya.
3. Perbaiki Content-Length dan Header Terlarang
Content-Length: biarkan server yang menghitungnya. Jangan menyetelnya secara manual di kode aplikasi jika ada plugin, middleware, atau web server yang juga mengompres atau mengubah output, karena panjang yang dideklarasikan tidak lagi sesuai dengan byte yang dikirim. Panjang yang disetel di kode PHP sementara plugin atau setelan PHP juga mengompres output adalah salah satu penyebabnya di situs WordPress.
Header khusus koneksi: hapus kode yang menyetel
Connection,Keep-Alive,Transfer-Encoding, atauUpgradepada respons. HTTP/2 melarangnya, dan meskipun nginx membuang sebagian besar header itu untuk Anda, sebagian server aplikasi dan proxy tidak melakukannya.Nilai header: pastikan tidak ada header yang berisi baris baru atau karakter kontrol. Masalah ini sering berasal dari input pengguna yang dimasukkan ke header, seperti nama file di
Content-Disposition.CDN di depan: jika Anda memakai Cloudflare atau CDN lain, uji origin secara langsung (dengan curl
--resolveatau entri hosts) untuk mengetahui apakah error berasal dari origin atau dari CDN.
ERR_HTTP2_PROTOCOL_ERROR vs Error Serupa
| Error | Kode | Yang terjadi |
|---|---|---|
| ERR_HTTP2_PROTOCOL_ERROR | -337 | Respons HTTP/2 melanggar aturan protokol |
| ERR_QUIC_PROTOCOL_ERROR | -356 | Kegagalan sejenis di HTTP/3 (QUIC) |
| ERR_SSL_PROTOCOL_ERROR | -107 | Handshake HTTPS (TLS) gagal sebelum HTTP/2 dimulai |
| ERR_CONNECTION_CLOSED | -100 | Koneksi ditutup sebelum halaman tiba |
| ERR_EMPTY_RESPONSE | -324 | Server sama sekali tidak mengirim apa pun |
Panduan lengkapnya: ERR_QUIC_PROTOCOL_ERROR, ERR_SSL_PROTOCOL_ERROR, ERR_CONNECTION_CLOSED, dan ERR_EMPTY_RESPONSE. Untuk memeriksa sertifikat dan konfigurasi HTTPS sebuah situs dari luar, gunakan SSL Checker.
Lihat header yang benar-benar dikirim situs Anda
HTTP Headers Checker dari DNS Robot mengambil URL mana pun dari server kami dan menampilkan kode status serta setiap header respons, sehingga header yang terlarang atau rusak mudah ditemukan.
Coba HTTP Headers CheckerAdvertisement
Pertanyaan yang Sering Diajukan
Artinya Chrome menerima respons HTTP/2 yang melanggar aturan protokol, misalnya respons yang berakhir terlalu cepat, mendeklarasikan ukuran yang salah, atau memuat header terlarang, sehingga respons itu dibuang. Di Chromium, ini adalah net error -337.