ERR_HTTP2_PROTOCOL_ERROR: Anlamı ve Çözümü (Chrome, Edge)

Önemli bilgi

ERR_HTTP2_PROTOCOL_ERROR (Chromium hata kodu -337), sayfayı taşıyan HTTP/2 akışının başarısız olduğu anlamına gelir. Ya sunucu, proxy veya CDN akışı yarıda sıfırlamıştır (Chrome bu tür her sıfırlamayı -337 olarak bildirir) ya da Chrome HTTP/2 kurallarını çiğneyen başlıkları reddetmiştir. Ziyaretçiler için sayfayı yenilemek, Gizli pencere açmak, sitenin çerezlerini temizlemek veya antivirüsün HTTPS taramasını duraklatmak bazen işe yarar, ancak çoğu zaman yalnızca site düzeltebilir. Site sahipleri için olağan nedenler sunucunun ya da proxy'nin tamamlayamadığı bir yanıt (dolu disk, yazılamayan geçici klasör, çöken uygulama), gövdeyle eşleşmeyen bir Content-Length ya da Transfer-Encoding gibi yasak bir başlıktır. Hatayı curl --http2 -v ile yeniden üretin.

Şimdi kontrol edin

ERR_HTTP2_PROTOCOL_ERROR gösteren Chrome hata sayfası ve HTTP/2 protokol hatalarını gideren kontroller
ERR_HTTP2_PROTOCOL_ERROR gösteren Chrome hata sayfası ve HTTP/2 protokol hatalarını gideren kontroller
Okumaya başlayın
  1. ERR_HTTP2_PROTOCOL_ERROR Nedir?
  2. HTTP/2 Neleri Bozuk Yanıt Sayar
  3. ERR_HTTP2_PROTOCOL_ERROR Hatasına Ne Neden Olur?
  4. Çözüm 1: Sert Yenileme Yapın ve Gizli Pencereyi Deneyin
  5. Çözüm 2: O Sitenin Çerezlerini ve Önbelleğe Alınan Dosyalarını Temizleyin
  6. Çözüm 3: Antivirüsün HTTPS Taramasını ve Uzantıları Duraklatın
  7. Çözüm 4: Chrome'u Güncelleyin ve Diğer Tarayıcıları Kontrol Edin
  8. Çözüm 5: Sayfayı HTTP/2 Olmadan Test Edin
  9. Web Sitesi Sahipleri İçin: HTTP/2 Protokol Hatalarını Düzeltme
  10. 1. Hatayı curl ile Yeniden Üretin
  11. 2. Akışın Ortasında Kesilen Yanıtları Kontrol Edin
  12. 3. Content-Length'i ve Yasak Başlıkları Düzeltin
  13. ERR_HTTP2_PROTOCOL_ERROR ve Benzer Hatalar
  14. Sıkça Sorulan Sorular

ERR_HTTP2_PROTOCOL_ERROR Nedir?

ERR_HTTP2_PROTOCOL_ERROR, sayfayı taşıyan HTTP/2 akışının başarısız olduğunu gösteren bir Chrome ve Edge hatasıdır: sunucu akışı bitmeden sıfırlamış ya da tarayıcının reddettiği başlıklar göndermiştir. Chromium içinde bu, -337 numaralı ağ hatasıdır: "There is an HTTP/2 protocol error" (net_error_list.h). Chrome'un bu hata için özel bir sayfası yoktur; bu yüzden genel hata sayfasını görürsünüz: "Bu siteye ulaşılamıyor" başlığı ve "… adresindeki web sayfası, geçici olarak kullanılamıyor veya kalıcı olarak yeni bir web adresine taşınmış olabilir." açıklaması; altında da ERR_HTTP2_PROTOCOL_ERROR yazar. Edge aynı kodu kendi "Hmm… can't reach this page" ekranında gösterir.

HTTP/2, artık çoğu HTTPS sitenin kullandığı daha hızlı HTTP sürümüdür. Her istek, tek bir bağlantı içinde ayrı bir akış olarak ilerler ve iki taraf da bir akışı sıfırlayarak iptal edebilir. Chrome, sunucudan gelen her sıfırlamayı sunucunun gerekçesi ne olursa olsun protokol hatası olarak bildirir; başlıklar HTTP/2 kurallarını çiğnediğinde de akışı kendisi iptal eder (Transfer-Encoding başlığı, başlık adında büyük harf, eksik durum kodu).

Geliştiriciler bu hatayı DevTools konsolunda çoğu zaman net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK) olarak görür. Bu kombinasyon güçlü bir ipucudur: başlıklar geçerliydi ve sunucu 200 ile yanıt verdi, ancak gövde gelirken akış koptu.

Bir sayfanın gerçekte gönderdiği başlıkları görün

HTTP/2 Neleri Bozuk Yanıt Sayar

HTTP/2 standardı (RFC 9113), bir yanıtı bozuk hale getiren hataları listeler. Gerçek hayattaki hataların çoğunun arkasında bu sorunlar vardır; her birinin tarayıcıya nasıl ulaştığı aşağıda:

KuralKuralı ne bozar
Content-Length gövde boyutuna eşit olmalıdırBir sunucunun veya eklentinin bir boyut bildirip başka bir boyut göndermesi; öndeki proxy, CDN veya sunucu bunun üzerine akışı sıfırlar
Yanıt düzgün şekilde sona ermelidirSunucunun, proxy'nin veya uygulamanın yanıtı tamamlayamaması (dolu disk, çökme, zaman aşımı) ve akışı sıfırlaması; nginx, başlattığı bir yanıtı tamamlayamadığında bunu yapar
Bağlantıya özgü başlıklar olmamalıdırBir HTTP/2 yanıtında Transfer-Encoding (Chrome reddeder); Connection, Keep-Alive, Proxy-Connection ve Upgrade de yasaktır ve curl gibi katı istemciler bunları reddeder
Başlık adları küçük harfle yazılmalıdırBüyük harf içeren başlık adlarının olduğu gibi HTTP/2'ye aktarılması
Geçerli başlık değerleriBir başlık değerinin içinde satır sonu veya başka yasak karakterler bulunması
Geçerli bir :status satırıEksik veya okunamayan bir durum kodu

ERR_HTTP2_PROTOCOL_ERROR Hatasına Ne Neden Olur?

Vakaların çoğu sunucu tarafından kaynaklanır, ancak kendi bilgisayarınızdaki birkaç şey de bir yanıtı size ulaşırken bozabilir:

  • Sunucuda: sunucunun veya proxy'nin tamamlayamadığı bir yanıt (disk alanı biten veya geçici dosyalarını yazamayan bir proxy, akış sırasında çöken bir uygulama, bir zaman aşımı), öndeki proxy'nin pes etmesine yol açan yanlış Content-Length değerleri, yasak veya geçersiz başlıklar ve eski bir sunucu ya da CDN yapılandırmasındaki hatalı HTTP/2 desteği.
  • Sizin tarafınızda: HTTPS'i inceleyip trafiği yeniden yazan antivirüs veya güvenlik duvarı yazılımları, istekleri ya da yanıtları değiştiren tarayıcı uzantıları, sunucunun yanlış işlediği bir istek (örneğin aşırı büyük çerezler) ve ara sıra eski bir Chrome sürümü.

Çözüm 1: Sert Yenileme Yapın ve Gizli Pencereyi Deneyin

Sayfayı önbelleği kullanmadan yenilemek için Ctrl + Shift + R (Mac: Cmd + Shift + R) tuşlarına basın. Bir kez yarıda kesilen bir yanıt, sonraki denemede sorunsuz gelebilir.

Ardından sayfayı bir Gizli pencerede açın (Ctrl + Shift + N, Mac'te Cmd + Shift + N). Gizli pencerede çerez ve normal profilinizden gelen önbellek yoktur, uzantılar da varsayılan olarak kapalıdır. Sayfa orada yükleniyorsa Çözüm 2 veya Çözüm 3 normal pencerenizdeki sorunu giderir.

Çözüm 2: O Sitenin Çerezlerini ve Önbelleğe Alınan Dosyalarını Temizleyin

Sitenin çerezlerini ve önbelleğe alınan dosyalarını temizlemek, Chrome'un gönderdiği isteği değiştirir (daha az çerez, yeniden doğrulanacak önbellek kopyası yok) ve bir sunucu hatasını atlatabilir. Adres çubuğunun solundaki Site bilgilerini görüntüle simgesine tıklayın → Çerezler ve site verileri → Cihaz üzerindeki site verilerini yönetin → verileri silin, ardından sayfayı yenileyin. Daha kapsamlı bir temizlik için Ctrl + Shift + Delete tuşlarına basın ve Son 7 gün için Önbelleğe alınan resimler ve dosyalar öğesini temizleyin.

Çözüm 3: Antivirüsün HTTPS Taramasını ve Uzantıları Duraklatın

HTTPS'in şifresini çözüp inceleyen güvenlik yazılımları her HTTP/2 bağlantısının ortasında durur. HTTP/2 desteği hatalı veya güncel değilse akışları bozabilir ya da Chrome'un reddettiği başlıkları iletebilir. Yalnızca HTTPS tarama özelliğini kapatın (Avast/AVG: Web Shield → "Enable HTTPS scanning"; ESET: "SSL/TLS protocol filtering"; Kaspersky: "Scan encrypted connections") ve sayfayı yenileyin. Bu sorunu çözerse antivirüsü güncelleyin ve site için bir istisna ekleyin.

Ardından chrome://extensions adresinden tüm uzantıları devre dışı bırakın, sayfayı yenileyin, sonra uzantıları teker teker yeniden açın. Reklam engelleyiciler, gizlilik araçları ve başlıkları düzenleyen her şey olağan şüphelilerdir.

Çözüm 4: Chrome'u Güncelleyin ve Diğer Tarayıcıları Kontrol Edin

Bekleyen güncellemeleri yüklemek için chrome://settings/help adresini açın, ardından tarayıcıyı yeniden başlatın. Sonra aynı sayfayı Firefox'ta veya Safari'de, ayrıca başka bir cihazda ya da ağda açın. Her yerde başarısız oluyorsa site bozuktur ve yalnızca sahibi düzeltebilir (antivirüsün HTTPS taraması bir bilgisayardaki tüm tarayıcıları etkiler; bu yüzden asıl test ikinci bir cihazdır). Yalnızca Chrome veya Edge başarısız oluyorsa site büyük olasılıkla Chrome'un reddettiği bir başlık gönderiyordur; yine de Çözüm 2 ve 3'ü tekrarlamaya değer.

Çözüm 5: Sayfayı HTTP/2 Olmadan Test Edin

Chrome, HTTP/2 (ve HTTP/3) kapalı olarak başlatılabilir; bu, HTTP/2'nin işin içinde olup olmadığını gösterir. Bir terminalden ikinci, ayrı bir Chrome başlatın; ek profil klasörü, normal Chrome'unuz açıkken bile onu yeni bir örnek yapar:

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

Sayfa o pencerede yükleniyorsa sitenin HTTP/2 yanıtları sorunludur ve sahibinin bunları düzeltmesi gerekir. Sayfa şimdi ERR_CONTENT_LENGTH_MISMATCH veya ERR_INCOMPLETE_CHUNKED_ENCODING ile başarısız oluyorsa sunucu, protokol ne olursa olsun yanıtı yarıda kesiyordur. İşiniz bitince o pencereyi kapatın; normal Chrome'unuz etkilenmez.

Web Sitesi Sahipleri İçin: HTTP/2 Protokol Hatalarını Düzeltme

Farklı ağlardaki ve tarayıcılardaki ziyaretçiler hatayı bildiriyorsa sorun sizin altyapınızdadır. Aşağıdaki üç kontrol, bu hataların neredeyse tamamını bulur.

1. Hatayı curl ile Yeniden Üretin

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

HTTP/1.1 çalışıyor ve HTTP/2 başarısız oluyorsa HTTP/2 işin içindedir. "Reset by server", sunucunun ya da bir proxy'nin yanıtın ortasında pes ettiğini gösterir. curl tam olarak Chrome'un kontrol ettiklerini kontrol etmez (Chrome'un kabul ettiği Content-Length uyuşmazlıklarını ve bağlantı başlıklarını reddeder); bu yüzden bunu kanıt değil, güçlü bir ipucu olarak değerlendirin. HTTP Başlık Kontrolü aracı, uygulamanızın ayarladığı başlıkları ağınızın dışından gösterir.

2. Akışın Ortasında Kesilen Yanıtları Kontrol Edin

Sunucu tarafındaki en yaygın neden, başlayan (durum 200, başlıklar gönderilmiş) ama sonra tamamlanamayan bir yanıttır. nginx, uygulamanızdan gelen büyük yanıtları geçici dosyalara arabelleğe alır; disk doluysa veya nginx geçici klasörüne yazamıyorsa akışı sıfırlar ve tarayıcı bir protokol hatası bildirir. Kontrol edin:

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

Uygulamanın kendisini de kontrol edin: büyük bir sayfayı veya indirmeyi akış halinde gönderirken çöken, zaman aşımına uğrayan ya da bellek limitine takılan bir PHP veya Node işlemi aynı sonucu doğurur. Hatanın gerçekleştiği zamana ait uygulama günlükleri bunu genellikle gösterir.

3. Content-Length'i ve Yasak Başlıkları Düzeltin

  • Content-Length: bırakın sunucu hesaplasın. Bir eklenti, ara katman yazılımı (middleware) veya web sunucusu da çıktıyı sıkıştırıyor ya da değiştiriyorsa bu değeri uygulama kodunda elle ayarlamayın; aksi halde bildirilen uzunluk gönderilen baytlarla artık eşleşmez. WordPress sitelerinde bu, PHP kodunda bir uzunluk ayarlanırken bir eklentinin veya PHP ayarının çıktıyı ayrıca sıkıştırmasıyla ortaya çıkabilir.
  • Transfer-Encoding: bir HTTP/2 yanıtında asla göndermeyin; Chrome böyle bir başlık görünce akışı sıfırlar. RFC 9113 ayrıca Connection, Keep-Alive, Proxy-Connection ve Upgrade başlıklarını da yasaklar. Chrome bunları yok sayar, ancak curl ve diğer katı istemciler reddeder; nginx ise proxy'lenen yanıtlardan çoğunu sizin yerinize ayıklar.
  • Başlık değerleri: hiçbir başlığın satır sonu veya kontrol karakteri içermediğinden emin olun. Bu genellikle bir başlığa yerleştirilen kullanıcı girdisinden kaynaklanır; örneğin Content-Disposition içindeki bir dosya adı.
  • Öndeki CDN: Cloudflare veya başka bir CDN kullanıyorsanız hatanın kaynak sunucudan mı yoksa CDN'den mi geldiğini anlamak için kaynak sunucuyu doğrudan test edin (curl --resolve veya bir hosts kaydıyla).

ERR_HTTP2_PROTOCOL_ERROR ve Benzer Hatalar

HataKodNe oldu
ERR_HTTP2_PROTOCOL_ERROR-337Bir HTTP/2 yanıtı protokol kurallarını çiğnedi
ERR_QUIC_PROTOCOL_ERROR-356Aynı türde bir hata, HTTP/3 (QUIC) üzerinde
ERR_SSL_PROTOCOL_ERROR-107HTTPS (TLS) el sıkışması HTTP/2 başlamadan önce başarısız oldu
ERR_CONNECTION_CLOSED-100Bağlantı, sayfa gelmeden önce kapatıldı
ERR_EMPTY_RESPONSE-324Sunucu hiçbir şey göndermedi

Ayrıntılı rehberler: ERR_QUIC_PROTOCOL_ERROR, ERR_SSL_PROTOCOL_ERROR, ERR_CONNECTION_CLOSED ve ERR_EMPTY_RESPONSE. Bir sitenin sertifikasını ve HTTPS kurulumunu dışarıdan kontrol etmek için SSL Sertifika Kontrolü aracını kullanın.

Sitenizin gerçekte gönderdiği başlıkları görün

DNS Robot'un HTTP Başlık Kontrolü aracı, herhangi bir URL'yi bizim sunucularımızdan HTTP/1.1 ile çeker; durum kodunu ve uygulamanızın ayarladığı her yanıt başlığını (Content-Length, Content-Encoding, Content-Disposition) listeler. Böylece bunları curl --http2 çıktısıyla karşılaştırabilirsiniz.

Kaynaklar

  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

Sıkça Sorulan Sorular

ERR_HTTP2_PROTOCOL_ERROR ne anlama gelir?

Sayfayı taşıyan HTTP/2 akışının başarısız olduğu anlamına gelir. Çoğunlukla sunucu, bir proxy veya CDN yanıt bitmeden akışı sıfırlamıştır ve Chrome bunu protokol hatası olarak bildirir; bazen de Chrome, Transfer-Encoding gibi HTTP/2'nin yasakladığı başlıkları reddetmiştir. Chromium'da -337 numaralı ağ hatasıdır.

ERR_HTTP2_PROTOCOL_ERROR hatası benden mi, web sitesinden mi kaynaklanıyor?

Genellikle web sitesinden. Ancak antivirüsün HTTPS taraması, tarayıcı uzantıları veya aşırı büyük çerezler de buna neden olabilir; bu yüzden önce sert yenileme yapmayı, Gizli pencereyi ve HTTPS taramasını duraklatmayı deneyin. Her tarayıcıda ve her ağda başarısız oluyorsa yalnızca site sahibi düzeltebilir.

net::ERR_HTTP2_PROTOCOL_ERROR 200 ne anlama gelir?

Başlıklar geçerliydi ve sunucu 200 ile yanıt verdi, ancak gövde gelirken akış koptu: sunucu, proxy veya CDN akışı yarıda sıfırladı. Olağan nedenler disk alanı biten ya da geçici dosyalarını yazamayan bir proxy, yanıtın ortasında çöken bir uygulama veya gövdeyle eşleşmeyen bir Content-Length değeridir.

Chrome'da ERR_HTTP2_PROTOCOL_ERROR nasıl düzeltilir?

Ctrl + Shift + R ile sert yenileme yapın, Gizli pencereyi deneyin, sitenin çerezlerini ve önbelleğe alınan dosyalarını temizleyin, antivirüsün HTTPS taramasını duraklatın, uzantıları devre dışı bırakın ve Chrome'u güncelleyin. HTTP/2'nin işin içinde olup olmadığını denemek için ayrı bir Chrome'u --user-data-dir, --disable-http2 ve --disable-quic ile başlatıp sayfanın yüklenip yüklenmediğine bakın.

Chrome'da HTTP/2 devre dışı bırakılabilir mi?

Ayarlar sayfasından bırakılamaz. Test için ayrı bir Chrome'u --disable-http2 ve --disable-quic ile başlatın (ayrıca --user-data-dir ekleyin; yoksa çalışan bir Chrome bayrakları yok sayar). Bu yalnızca o açılış için geçerlidir. HTTP/2 siteleri hızlandırdığı için bu uzun vadeli bir çözüm değil, bir teşhis yöntemidir.

nginx sitemde ERR_HTTP2_PROTOCOL_ERROR neden oluyor?

Diskin dolu olup olmadığını veya nginx'in proxy ya da FastCGI geçici klasörlerine yazıp yazamadığını kontrol edin (hata günlüğünde "No space left on device" veya "Permission denied" satırlarını arayın). Ayrıca uygulamanın yanıtın ortasında çöküp çökmediğine ve uygulamanızın Transfer-Encoding başlığı ya da yanlış bir Content-Length gönderip göndermediğine bakın. Hatayı curl --http2 -v ile yeniden üretin.

Cloudflare, ERR_HTTP2_PROTOCOL_ERROR hatasına neden olabilir mi?

Genellikle kusur kaynak sunucudadır. Cloudflare'in belgeleri olağan nedenler olarak kaynak sunucudan gelen bozuk başlıkları ve sıkıştırma sorunlarını (Content-Length değeri güncellenmemiş bir gzip gövdesi ya da bozuk gzip) sayar; bunlar yalnızca trafik Cloudflare üzerinden geçtiğinde ortaya çıkabilir. Cloudflare'i atlayarak kaynak sunucuyu doğrudan test edin.

ERR_HTTP2_PROTOCOL_ERROR ile ERR_QUIC_PROTOCOL_ERROR arasındaki fark nedir?

İkisi, farklı protokollerdeki aynı tür hatadır. ERR_HTTP2_PROTOCOL_ERROR HTTP/2 (TCP üzerinde), ERR_QUIC_PROTOCOL_ERROR ise HTTP/3 (QUIC üzerinde) sırasında oluşur. QUIC'e müdahale eden güvenlik duvarları ve antivirüs yazılımları, ikincisinin yaygın bir ek nedenidir.

Önbelleği temizlemek ERR_HTTP2_PROTOCOL_ERROR hatasını düzeltir mi?

Bazen. Sitenin çerezlerini ve önbelleğe alınan dosyalarını temizlemek Chrome'un gönderdiği isteği değiştirir ve bir sunucu hatasını atlatabilir; bu yüzden denemeye değer. Sunucu akışı sıfırlamaya ya da hatalı başlıklar göndermeye devam ediyorsa hata, site düzeltilene kadar geri gelir.

Yazar hakkında

Shaik Vahid

DNS Robot'un kurucusu. Vahid, yıllarca web hosting desteğinde müşterilerin alan adı, DNS kaydı, SSL sertifikası ve e-posta teslimi sorunlarını çözdü. DNS Robot'un araçlarını geliştiriyor ve bu rehberleri insanların gerçekten karşılaştığı hatalardan yola çıkarak yazıyor.

HTTP Başlık Kontrolü

HTTP yanıt başlıklarını ve güvenlik başlıkları derecelendirmesini analiz edin