ERR_HTTP2_PROTOCOL_ERROR: arti dan cara mengatasinya

Poin penting

ERR_HTTP2_PROTOCOL_ERROR (error Chromium -337) berarti stream HTTP/2 yang membawa halaman gagal. Bisa jadi server, proxy, atau CDN mereset-nya di tengah jalan (Chrome melaporkan setiap reset seperti itu sebagai -337), atau Chrome menolak header yang melanggar aturan HTTP/2. Bagi pengunjung, memuat ulang, membuka jendela Incognito, menghapus cookie situs, atau menjeda pemindaian HTTPS antivirus kadang bisa melewatinya, tetapi biasanya hanya situs itu sendiri yang bisa memperbaikinya. Bagi pemilik situs, penyebab umumnya adalah respons yang tidak bisa diselesaikan server atau proxy (disk penuh, folder temp yang tidak bisa ditulisi, aplikasi yang crash), Content-Length yang tidak sesuai dengan body, atau header terlarang seperti Transfer-Encoding. Reproduksi dengan curl --http2 -v.

Periksa sekarang

Halaman error Chrome dengan ERR_HTTP2_PROTOCOL_ERROR di samping pemeriksaan untuk mengatasi error protokol HTTP/2
Halaman error Chrome dengan ERR_HTTP2_PROTOCOL_ERROR di samping pemeriksaan untuk mengatasi error protokol HTTP/2
Mulai membaca
  1. Apa itu ERR_HTTP2_PROTOCOL_ERROR?
  2. Apa yang dianggap rusak oleh HTTP/2
  3. Apa penyebab ERR_HTTP2_PROTOCOL_ERROR?
  4. Solusi 1: hard reload dan coba Incognito
  5. Solusi 2: hapus cookie dan file tersimpan situs itu
  6. Solusi 3: jeda pemindaian HTTPS antivirus dan ekstensi
  7. Solusi 4: perbarui Chrome dan coba browser lain
  8. Solusi 5: uji halaman tanpa HTTP/2
  9. Untuk pemilik situs: mengatasi error protokol HTTP/2
  10. 1. Reproduksi dengan curl
  11. 2. Periksa respons yang terpotong di tengah jalan
  12. 3. Perbaiki Content-Length dan header terlarang
  13. ERR_HTTP2_PROTOCOL_ERROR vs error serupa
  14. Pertanyaan yang Sering Diajukan

Apa itu ERR_HTTP2_PROTOCOL_ERROR?

ERR_HTTP2_PROTOCOL_ERROR adalah error Chrome dan Edge yang berarti stream HTTP/2 yang membawa halaman gagal: server mereset-nya sebelum selesai atau mengirim header yang ditolak browser. Di Chromium, ini adalah net error -337: "There is an HTTP/2 protocol error" (net_error_list.h). Chrome tidak punya halaman error khusus untuk kode ini, jadi yang muncul adalah halaman generik: "Situs ini tidak dapat dijangkau" dengan keterangan "Halaman web di … mungkin sedang tidak aktif untuk sementara atau dipindahkan secara permanen ke alamat web baru", lalu ERR_HTTP2_PROTOCOL_ERROR di bawahnya. Edge menampilkan kode yang sama di layar miliknya sendiri, "Hmm… can't reach this page".

HTTP/2 adalah versi HTTP yang lebih cepat dan kini dipakai sebagian besar situs HTTPS. Setiap permintaan berjalan sebagai stream tersendiri di dalam satu koneksi, dan kedua pihak bisa membatalkan stream dengan reset. Chrome melaporkan setiap reset dari server sebagai error protokol, apa pun alasan server, dan juga membatalkan stream sendiri ketika header melanggar aturan HTTP/2 (header Transfer-Encoding, huruf kapital di nama header, status yang hilang).

Developer sering melihatnya di konsol DevTools sebagai net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK). Kombinasi itu adalah petunjuk kuat: header valid dan server menjawab 200, tetapi stream gagal saat body sedang tiba.

Lihat header yang benar-benar dikirim sebuah halaman

Apa yang dianggap rusak oleh HTTP/2

Standar HTTP/2 (RFC 9113) mendaftar kesalahan yang membuat sebuah respons dianggap rusak (malformed). Inilah masalah di balik sebagian besar error di dunia nyata, beserta cara masing-masing sampai ke browser:

AturanYang melanggarnya
Content-Length harus sama dengan ukuran bodyServer atau plugin mendeklarasikan satu ukuran tetapi mengirim ukuran lain; proxy, CDN, atau server di depannya lalu mereset stream
Respons harus berakhir dengan bersihServer, proxy, atau aplikasi tidak bisa menyelesaikan respons (disk penuh, crash, timeout) dan mereset stream; nginx melakukannya saat tidak bisa menuntaskan respons yang sudah dimulai
Tidak boleh ada header khusus koneksiTransfer-Encoding dalam respons HTTP/2 (ditolak Chrome); Connection, Keep-Alive, Proxy-Connection, dan Upgrade juga dilarang, dan client yang ketat seperti curl menolaknya
Nama field harus huruf kecilNama header berhuruf kapital yang diteruskan begitu saja ke HTTP/2
Nilai header harus validBaris baru atau karakter terlarang lain di dalam nilai header
Baris :status yang validKode status yang hilang atau tidak bisa dibaca

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 tidak bisa diselesaikan server atau proxy (proxy yang kehabisan ruang disk atau tidak bisa menulis file temp-nya, aplikasi yang crash saat streaming, timeout), nilai Content-Length yang salah sehingga proxy di depannya menyerah, 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 lalu lintas, ekstensi browser yang mengubah permintaan atau respons, permintaan yang salah ditangani server (misalnya cookie yang terlalu besar), 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.

Solusi 2: hapus cookie dan file tersimpan situs itu

Menghapus cookie dan file tersimpan situs mengubah permintaan yang dikirim Chrome (cookie lebih sedikit, tidak ada salinan cache untuk divalidasi ulang), sehingga bisa menghindari bug di server. Klik ikon Lihat informasi situs di sebelah kiri address bar → Cookie dan data situs → Kelola data situs di perangkat → hapus datanya, lalu muat ulang. Untuk pembersihan yang lebih luas, tekan Ctrl + Shift + Delete lalu hapus Gambar dan file dalam cache untuk 7 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 merusak stream atau meneruskan header yang ditolak Chrome. Matikan hanya fitur pemindaian HTTPS-nya (Avast/AVG: Web Shield → "Enable HTTPS scanning"; ESET: "SSL/TLS protocol filtering"; Kaspersky: "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.

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, serta di perangkat atau jaringan lain. Jika gagal di mana-mana, situsnya yang rusak dan hanya pemiliknya yang bisa memperbaikinya (pemindaian HTTPS antivirus memengaruhi semua browser di satu komputer, jadi perangkat kedua adalah ujian yang sebenarnya). Jika hanya Chrome atau Edge yang gagal, situs itu kemungkinan mengirim header yang ditolak Chrome; Solusi 2 dan 3 tetap layak diulang.

Solusi 5: uji halaman tanpa HTTP/2

Chrome bisa dijalankan dengan HTTP/2 (dan HTTP/3) dimatikan, sehingga terlihat apakah HTTP/2 terlibat. Jalankan Chrome kedua yang terpisah dari terminal; folder profil tambahan membuatnya menjadi instance baru meskipun Chrome normal Anda sedang terbuka:

bash
# Windows (Command Prompt)
"C:\Program Files\Google\Chrome\Application\chrome.exe" --user-data-dir="%TEMP%\h2test" --disable-http2 --disable-quic

# macOS (Terminal)
open -na "Google Chrome" --args --user-data-dir=/tmp/h2test --disable-http2 --disable-quic

Jika halaman terbuka di jendela itu, respons HTTP/2 situs tersebut bermasalah dan pemiliknya perlu memperbaikinya. Jika sekarang gagal dengan ERR_CONTENT_LENGTH_MISMATCH atau ERR_INCOMPLETE_CHUNKED_ENCODING, server memotong respons apa pun protokolnya. Tutup jendela itu setelah selesai; Chrome normal Anda tidak terpengaruh.

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

bash
# HTTP/2: watch the end of the output
curl -sv --http2 https://example.com/broken-page -o /dev/null
# A stream the server gave up on ends with something like:
# HTTP/2 stream 1 was not closed cleanly: INTERNAL_ERROR (err 2)
# (curl 8.19+: HTTP/2 stream 1 reset by server (error 0x2 INTERNAL_ERROR);
#  "reset by curl" means curl rejected the response itself)

# Same URL over HTTP/1.1 for comparison
curl -sv --http1.1 https://example.com/broken-page -o /dev/null

Jika HTTP/1.1 berhasil dan HTTP/2 gagal, HTTP/2 terlibat. "Reset by server" menunjukkan server atau sebuah proxy menyerah di tengah respons. curl tidak memeriksa persis apa yang diperiksa Chrome (curl menolak Content-Length yang tidak sesuai dan header koneksi yang diloloskan Chrome), jadi anggap ini petunjuk kuat, bukan bukti. Cek HTTP Header menampilkan header yang disetel aplikasi 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 tidak bisa diselesaikan. nginx menampung respons besar dari aplikasi Anda ke dalam file sementara, dan jika disk penuh atau nginx tidak bisa menulis ke folder temp-nya, nginx mereset stream dan browser melaporkan error protokol. Periksa:

bash
df -h                                   # is any disk full?
sudo grep -E "No space left|Permission denied" /var/log/nginx/error.log | tail
ls -ld /var/lib/nginx/proxy /var/lib/nginx/fastcgi   # Debian/Ubuntu packages
ls -ld /var/cache/nginx/proxy_temp /var/cache/nginx/fastcgi_temp   # nginx.org packages
# the temp folders must be writable by the nginx worker user

Periksa 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.
  • Transfer-Encoding: jangan pernah mengirimnya dalam respons HTTP/2; Chrome mereset stream saat melihatnya. RFC 9113 juga melarang Connection, Keep-Alive, Proxy-Connection, dan Upgrade. Chrome mengabaikannya, tetapi curl dan client ketat lain menolaknya, dan nginx membuang sebagian besar header itu dari respons yang diproksi untuk Anda.
  • 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 --resolve atau entri hosts) untuk mengetahui apakah error berasal dari origin atau dari CDN.

ERR_HTTP2_PROTOCOL_ERROR vs error serupa

ErrorKodeYang terjadi
ERR_HTTP2_PROTOCOL_ERROR-337Respons HTTP/2 melanggar aturan protokol
ERR_QUIC_PROTOCOL_ERROR-356Kegagalan sejenis di HTTP/3 (QUIC)
ERR_SSL_PROTOCOL_ERROR-107Handshake HTTPS (TLS) gagal sebelum HTTP/2 dimulai
ERR_CONNECTION_CLOSED-100Koneksi ditutup sebelum halaman tiba
ERR_EMPTY_RESPONSE-324Server 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

Cek HTTP Header dari DNS Robot mengambil URL mana pun dari server kami lewat HTTP/1.1 dan menampilkan kode status serta setiap header respons yang disetel aplikasi Anda (Content-Length, Content-Encoding, Content-Disposition), sehingga bisa Anda bandingkan dengan hasil curl --http2.

Sumber

  1. net_error_list.h (HTTP2_PROTOCOL_ERROR -337), Chromium
  2. RFC 9113: HTTP/2, malformed messages, IETF
  3. HTTP/2: ERR_HTTP2_PROTOCOL_ERROR, Cloudflare

Pertanyaan yang Sering Diajukan

Apa arti ERR_HTTP2_PROTOCOL_ERROR?

Artinya stream HTTP/2 yang membawa halaman gagal. Biasanya server, proxy, atau CDN mereset-nya sebelum respons selesai, dan Chrome melaporkannya sebagai error protokol; kadang Chrome menolak header yang dilarang HTTP/2, seperti Transfer-Encoding. Di Chromium, ini adalah net error -337.

ERR_HTTP2_PROTOCOL_ERROR salah saya atau salah situsnya?

Biasanya salah situsnya. Namun pemindaian HTTPS antivirus, ekstensi browser, atau cookie yang terlalu besar juga bisa menyebabkannya, jadi coba dulu hard reload, jendela Incognito, dan jeda pemindaian HTTPS. Jika gagal di semua browser dan di semua jaringan, hanya pemilik situs yang bisa memperbaikinya.

Apa arti net::ERR_HTTP2_PROTOCOL_ERROR 200?

Header valid dan server menjawab 200, tetapi stream gagal saat body sedang tiba: server, proxy, atau CDN mereset-nya di tengah jalan. Penyebab umumnya adalah proxy yang kehabisan ruang disk atau tidak bisa menulis file temp, aplikasi yang crash di tengah respons, atau Content-Length yang tidak sesuai dengan body.

Bagaimana cara mengatasi ERR_HTTP2_PROTOCOL_ERROR di Chrome?

Lakukan hard reload dengan Ctrl + Shift + R, coba Incognito, hapus cookie dan file tersimpan situs itu, jeda pemindaian HTTPS antivirus, nonaktifkan ekstensi, dan perbarui Chrome. Untuk menguji apakah HTTP/2 terlibat, jalankan Chrome terpisah dengan --user-data-dir, --disable-http2, dan --disable-quic, lalu lihat apakah halaman terbuka.

Bisakah HTTP/2 dinonaktifkan di Chrome?

Tidak lewat halaman setelan. Untuk pengujian, jalankan Chrome terpisah dengan --disable-http2 dan --disable-quic (plus --user-data-dir, atau Chrome yang sedang berjalan akan mengabaikan flag-nya). Ini hanya berlaku untuk satu kali peluncuran itu. Ini alat diagnosis, bukan solusi jangka panjang, karena HTTP/2 membuat situs lebih cepat.

Kenapa ERR_HTTP2_PROTOCOL_ERROR terjadi di situs nginx saya?

Periksa apakah disk penuh atau nginx tidak bisa menulis ke folder temp proxy atau FastCGI-nya (cari "No space left on device" atau "Permission denied" di error log), apakah aplikasi crash di tengah respons, dan apakah aplikasi Anda mengirim header Transfer-Encoding atau Content-Length yang salah. Reproduksi dengan curl --http2 -v.

Apakah Cloudflare bisa menyebabkan ERR_HTTP2_PROTOCOL_ERROR?

Biasanya origin yang bermasalah. Dokumentasi Cloudflare menyebut header origin yang rusak dan masalah kompresi (body gzip yang Content-Length-nya tidak diperbarui, atau gzip yang rusak) sebagai penyebab yang umum, dan masalah itu bisa baru muncul saat lalu lintas melewati Cloudflare. Uji origin secara langsung, tanpa melewati Cloudflare.

Apa bedanya ERR_HTTP2_PROTOCOL_ERROR dan ERR_QUIC_PROTOCOL_ERROR?

Keduanya kegagalan sejenis di protokol yang berbeda. ERR_HTTP2_PROTOCOL_ERROR terjadi di HTTP/2 (di atas TCP), sedangkan ERR_QUIC_PROTOCOL_ERROR di HTTP/3 (di atas QUIC). Firewall dan antivirus yang mengganggu QUIC adalah penyebab tambahan yang umum untuk error kedua.

Apakah menghapus cache bisa mengatasi ERR_HTTP2_PROTOCOL_ERROR?

Kadang. Menghapus cookie dan file tersimpan situs mengubah permintaan yang dikirim Chrome, sehingga bisa menghindari bug di server, jadi layak dicoba. Jika server terus mereset stream atau mengirim header yang salah, error akan kembali sampai situsnya diperbaiki.

Tentang penulis

Shaik Vahid

Pendiri DNS Robot. Vahid bertahun-tahun bekerja di dukungan web hosting, memperbaiki domain, record DNS, sertifikat SSL, dan pengiriman email untuk pelanggan. Ia membangun alat-alat DNS Robot dan menulis panduan ini dari error yang benar-benar dialami orang.

Cek HTTP Header

Analisis header respons HTTP dan penilaian header keamanan