---
title: "err_http2_protocol_error Hatası Nedir, Nasıl Çözülür?"
description: "err_http2_protocol_error, Chrome'un HTTP/2 bağlantısında protokole aykırı bir çerçeve alıp isteği iptal ettiğini gösterir. Nedenleri ve adım adım çözümleri."
url: https://proxynet.io/tr/blog/err-http2-protocol-error
date: 2026-11-07
author: "Acar Diveroli"
category: "Nasıl Yapılır"
lang: tr
---

# err_http2_protocol_error Hatası Nedir, Nasıl Çözülür?

Chrome'da bir web uygulaması, bir mağazanın ödeme sayfası ya da bir video servisinin sayfası açıyorsunuz; sayfa yerine gri bir ekran geliyor. Başlıkta "Bu siteye ulaşılamıyor", altında web sayfasının "geçici olarak kullanılamıyor veya kalıcı olarak yeni bir web adresine taşınmış" olabileceğini söyleyen bir satır, en altta da `ERR_HTTP2_PROTOCOL_ERROR` yazıyor. Bazen de sayfa yarım yükleniyor, bir betik ya da resim eksik kalıyor ve geliştirici konsolunda "Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR" satırı görünüyor.

Kod, güvenli sitelerin çoğunun Chrome ile konuşurken kullandığı HTTP/2 protokolüne işaret eder ve neredeyse her zaman sitenin ya da sizinle site arasındaki bir cihazın HTTP/2 kurallarını bozan bir şey gönderdiği anlamına gelir. Bu yazıda kodun ne anlama geldiğini, bir isteğin nasıl koptuğunu, yeniden ürettiğimiz nedenleri, ziyaretçiler için çözümleri, site sahiplerinin nginx, IIS ve Cloudflare'de nelere bakacağını ve hatanın Go, Node.js ve Python'daki hâlini anlatıyoruz.

> **Not: Kısa cevap**
>
> `ERR_HTTP2_PROTOCOL_ERROR`, Chrome'un siteyle kurduğu HTTP/2 bağlantısında HTTP/2 protokolüne aykırı bir çerçevenin taşındığını, bu yüzden isteğin cevaplanmak yerine iptal edildiğini gösterir. Çoğu zaman sitenin sunucusu ya da önündeki CDN, bozuk biçimli bir cevap yüzünden isteği `PROTOCOL_ERROR` koduyla sıfırlamıştır: `Transfer-Encoding` gibi yasak bir başlık, sıkıştırılmış gövdeyle artık uyuşmayan bir `Content-Length` ya da aşırı büyük başlıklar. Daha seyrek olarak şifreli trafiği inceleyen bir güvenlik programı, güvenlik duvarı ya da VPN çerçeveleri bozar. Ziyaretçiyseniz sayfayı yenileyin, Gizli pencerede ya da başka bir tarayıcıda deneyin, VPN'i ve antivirüsün web korumasını tek bir deneme için kapatın, sitenin kayıtlı verilerini silin. Site sizinse hata veren cevabı HTTP/2 ile HTTP/1.1 üzerinden karşılaştırın.

## ERR_HTTP2_PROTOCOL_ERROR ne anlama gelir?

Tarayıcınızla site arasındaki HTTP/2 bağlantısına protokolün izin vermediği bir şeyin geldiği ve isteğin tamamlanamadığı anlamına gelir. HTTP/2, HTTP'nin ikinci büyük sürümüdür; TCP 443 numaralı portta, TLS ile şifrelenmiş bir bağlantının içinde çalışır ve sunucu onu TLS el sıkışması sırasında `h2` tanımlayıcısıyla seçer. Chrome ve Edge, Chromium'un üzerine kuruludur; Chromium'un [ağ hataları listesi](https://github.com/chromium/chromium/blob/main/net/base/net_error_list.h) bu kodu -337 numarasıyla ve tek satırla tanımlar: "There is an HTTP/2 protocol error." (Bir HTTP/2 protokol hatası var.)

Bu satır suçluyu değil, belirtiyi adlandırır. HTTP/2 standardı `PROTOCOL_ERROR` kodunu "daha özel bir hata kodunun bulunmadığı" durumlar için genel kod olarak ayırır; yani mesaj bir kuralın bozulduğunu söyler, hangisinin bozulduğunu söylemez. Kardeşi `ERR_QUIC_PROTOCOL_ERROR` ise QUIC ve UDP üzerindeki HTTP/3'e aittir, nedenleri farklıdır; onu [err_quic_protocol_error Hatası Nedir, Nasıl Çözülür?](/tr/blog/err-quic-protocol-error) yazısında anlattık.

## Hata sayfası size ne söylüyor?

| Ekrandaki satır | Anlamı |
|---|---|
| "Bu siteye ulaşılamıyor" | Chrome'un, sayfa gösterilemeden başarısız olan istekler için kullandığı genel başlık |
| "example.com adresindeki web sayfası, geçici olarak kullanılamıyor veya kalıcı olarak yeni bir web adresine taşınmış olabilir." | Teşhis değil, varsayılan bir cümle; site çoğu zaman açıktır |
| `ERR_HTTP2_PROTOCOL_ERROR` | Sayfadaki tek somut bilgi |

Bu satırları Chromium 145'te ekranda gördük. Sayfada "Aşağıdakileri deneyin" listesi de, yeniden yükleme düğmesi de yoktur: Chromium'da HTTP/2 hatalarına özel bir metin bulunmadığı için genel sayfaya düşülür. Edge aynı kodu gösterir; bu başlık altında çıkan diğer kodları [Bu Siteye Ulaşılamıyor Hatası Nedir, Neden Çıkar?](/tr/blog/this-site-cant-be-reached) yazısında bulabilirsiniz.

Bağlantı, sunucu `200 OK` başlığını gönderdikten sonra koparsa sayfa eksik görünebilir ve geliştirici konsolu (F12) kesilen istek için "Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR" satırını yazar. Hatanın yanında görünen 200 tam olarak bunu anlatır: akış sıfırlanmadan önce cevap başlamıştı.

## Bir HTTP/2 isteği nasıl kopar?

1. **Bağlantı kurulur.** Chrome, 443 numaralı porta bir TLS bağlantısı açar ve `h2` teklif eder; sunucu kabul eder ve iki taraf sınırlarını içeren birer `SETTINGS` çerçevesi gönderir.
2. **İstekler akış olarak taşınır.** Her istek, paylaşılan bağlantı üzerinde kendi akışını alır; başlıklar `HEADERS`, gövde `DATA` çerçeveleriyle gider.
3. **Bir çerçeve kuralı bozar.** HTTP/2 standardı [RFC 9113](https://www.rfc-editor.org/rfc/rfc9113.html), `Content-Length` değerinin `DATA` çerçevelerinin toplamına eşit olmadığı, bir başlık değerinin boşlukla başlayıp bittiği ya da `Connection` veya `Transfer-Encoding` gibi bağlantıya özgü bir başlığın bulunduğu mesajları bozuk biçimli sayar.
4. **Bunu fark eden uç, akışı sıfırlar.** Bozuk biçimli mesaj `PROTOCOL_ERROR` türünde bir akış hatası olarak ele alınmak zorundadır; uç, o akış için bir `RST_STREAM` çerçevesi gönderir. Bağlantının tamamını bozan bir hata ise `GOAWAY` çerçevesine dönüşür ve bağlantı kapatılır.
5. **Chrome -337 bildirir.** Chrome, `PROTOCOL_ERROR` kodlu bir `RST_STREAM` aldığında ya da geçersiz bir çerçeveyi kendisi fark ettiğinde o isteği `ERR_HTTP2_PROTOCOL_ERROR` ile sonlandırır. Chromium bu hatayı yeniden denemez ve HTTP/1.1'e geri dönmez; Chrome'un bir isteği eski protokolle yeniden göndermesini yalnız `HTTP_1_1_REQUIRED` kodu sağlar.

## ERR_HTTP2_PROTOCOL_ERROR neden çıkar?

| Neden | Tipik belirti | Kim düzeltir? |
|---|---|---|
| Sitenin uygulaması HTTP/2 kurallarını bozan bir cevap gönderir: yasak bir başlık, yanlış `Content-Length`, sonunda boşluk olan bir başlık değeri | Tek site ya da tek sayfa, her ziyaretçide | Site sahibi |
| Bir CDN ya da ters proxy, kaynak sunucunun bozuk cevabını reddedip akışınızı sıfırlar | CDN üzerinden hata verir, kaynak sunucudan açılır | Site sahibi |
| Sunucu ya da CDN sınırını aşan cevap başlıkları; genellikle çok büyük çerezler | Tek site, giriş yaptıktan sonra | Site sahibi; sitenin verilerini silmek hemen yardımcı olur |
| Sunucuda eski ya da yanlış yapılandırılmış bir HTTP/2 uygulaması | Tek site, çoğu zaman HTTPS yeni açılmışken | Site sahibi |
| TLS'i inceleyip çerçeveleri değiştiren güvenlik programı, güvenlik duvarı ya da filtre | Tek bilgisayarda ya da tek ağda birçok site | Siz ya da bilgi işlem ekibi |
| Trafiği kendi üzerinden geçiren bir VPN ya da "koruma" uygulaması | Yalnız uygulama çalışırken | Siz |

HTTP/2 deneme sunucumuzda Chromium 145, gövdeden büyük bir `Content-Length` değerine göz yumdu ve kesik sayfayı bile gösterdi; Node.js'in HTTP/2 istemcisi, Python'daki httpx ve undici ise aynı cevabı `PROTOCOL_ERROR` ile reddetti. Sunucu akışı kendisi sıfırladığında Chromium hemen `ERR_HTTP2_PROTOCOL_ERROR` gösterdi. Gerçek hayattaki yaygın örüntü budur: tarayıcının yutacağı hafif bozuk bir cevabı, sitenin önündeki daha katı bir CDN ya da yük dengeleyici reddeder ve ziyaretçinin akışını sıfırlar.

## Ziyaretçi olarak nasıl çözersiniz?

Başka güvenli siteler de hata veriyorsa sebep sizin tarafınızdadır; site telefonunuzda Wi-Fi kapalıyken de açılmıyorsa sebep sitededir. Her adımdan sonra sayfayı yenileyin.

1. **Bir kez yenileyin.** Sol üstteki **Bu sayfayı yeniden yükle** simgesine tıklayın.
2. **Gizli pencerede ya da başka bir tarayıcıda deneyin.** **Diğer > Yeni Gizli pencere**'yi açın; sayfa orada yükleniyorsa **Diğer > Uzantılar > Uzantıları yönet** yolundan uzantıları teker teker kapatın.
3. **VPN'i ve filtreleme uygulamalarını kapatın;** trafiği kendi üzerinden geçirerek reklam engelleyen uygulamalar da buna dahildir.
4. **Antivirüsün web korumasını bir deneme için duraklatın.** HTTPS trafiğini tarayan programlar şifreli bağlantının içine girer. Yalnız bu özelliği kapatın, bir kez yenileyin, sonra yeniden açın; duraklatmak işe yaradıysa programı güncelleyin.
5. **Sitenin kayıtlı verilerini silin.** **Diğer > Ayarlar**'ı, ardından **Gizlilik ve güvenlik > Üçüncü taraf çerezleri > Tüm site verilerini ve izinlerini göster**'i seçin, siteyi aratın, **Sil**'i seçip **Sil** ile onaylayın.
6. **Chrome'u güncelleyin.** **Diğer > Yardım > Google Chrome Hakkında**'yı seçin; görünüyorsa **Yeniden başlat**'a tıklayın.
7. **İş yeri ya da okul ağındaysanız bilgi işlem ekibine sorun.** Trafiği inceleyen güvenlik duvarı kuruma aittir; çözüm de kurumdadır.

Android'de Chrome'u Play Store'dan güncelleyin: profil simgesine, ardından **Uygulamaları ve cihazı yönet**'e dokunun ve "Güncellemeler" altında Chrome'un yanındaki **Güncelle**'ye dokunun. Kayıtlı verileri silmek için Chrome'u açın, **Diğer > Tarama verilerini sil**'e dokunun, veri türlerini seçip **Verileri sil**'e dokunun. Siteyi suçlamadan önce Wi-Fi ile mobil veri arasında geçiş yapın ve açık bir VPN uygulaması varsa kapatın.

## Site sizinse: bozuk cevap nasıl bulunur?

1. **İsteği belirleyin.** DevTools'ta **Ağ** panelini açın, sayfayı yenileyin ve bu hatayla başarısız olarak işaretlenen isteği bulun; tablonun başlık satırına sağ tıklayarak açtığınız **Protokol** sütunu `h2` gösterir.
2. **Komut satırından iki kez isteyin.** `curl --http2 -v https://example.com/yol` ve aynı adresle `curl --http1.1 -v` iki protokolü zorlar ve cevap başlıklarını yazdırır. HTTP/2 hata verirken HTTP/1.1 sayfayı getiriyorsa cevap bir HTTP/2 kuralını bozuyordur. Windows 11 ile gelen curl `--http2` seçeneğini reddeder ("the installed libcurl version does not support this"); denemeyi Linux'ta, macOS'ta ya da sunucuda yapın.
3. **Kaynak sunucuyu kenarla karşılaştırın.** CDN ya da yük dengeleyici arkasındaysanız aynı adresi bir kez doğrudan kaynak sunucudan, bir kez herkese açık adres üzerinden isteyin ve başlıkları karşılaştırın: `Content-Length` ve `Content-Encoding`, varsa `Connection`, `Keep-Alive` ya da `Transfer-Encoding` başlığı, sonunda boşluk olan değerler.
4. **Protokolü değil, cevabı düzeltin.** Uygulama `Content-Length` değerini belirledikten sonra gövdeyi gzip ile sıkıştıran bir ara katman klasik sebeptir; sıkıştırmayı tek bir katmana bırakın ve uzunluğu yeniden hesaplatın. Bağlantıya özgü başlıkları uygulama kodundan çıkarın, çerezleri küçük tutun. Sunucuda HTTP/2'yi kapatmak birkaç dakikalık bir teşhis adımıdır, asla çözüm değildir: cevap bozuk kalır ve bir sonraki katı istemci yine hata verir.
5. **nginx.** Güncel sürümler HTTP/2'yi `listen 443 ssl;` satırının yanındaki, 1.25.1'den beri var olan `http2 on;` yönergesiyle açar; eski `listen 443 ssl http2;` biçimi kullanımdan kalkmıştır, `http2_max_field_size` ve `http2_max_header_size` ise 1.19.7'den beri geçersizdir ve yerlerini `large_client_header_buffers` almıştır; ayrıntılar [ngx_http_v2_module belgesindedir](https://nginx.org/en/docs/http/ngx_http_v2_module.html).
6. **IIS.** [Microsoft'un IIS'te HTTP/2 yazısına](https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis) göre Windows Server 2016 ve sonrasındaki IIS 10, HTTP/2'yi yalnız TLS üzerinde konuşur ve Windows kimlik doğrulamasında HTTP/1.1'e geri döner; **Logging** (Günlük Kaydı) > **Select Fields** (Alanları Seç) altındaki "Protocol version" alanı hangi isteklerin HTTP/2 kullandığını gösterir. Deneme için Windows, HTTP/2'yi TLS bağlaması başına `netsh http update sslcert ... disablehttp2=enable` ile kapatabilir (`netsh http` belgesinden; biz çalıştırmadık).
7. **Cloudflare.** HTTP/2 bütün planlarda varsayılan olarak açıktır ve Cloudflare'in [HTTP/2 sayfası](https://developers.cloudflare.com/speed/optimization/protocol/http2/), proxy'lenen sitelerde olağan sebepler olarak hatalı biçimlendirilmiş kaynak başlıklarını ve `Content-Length` güncellenmeden yapılan gzip gibi sıkıştırma sorunlarını sayar ve sıkıştırmayı Cloudflare'e bırakmayı önerir.

## Geliştiriciler ve scraper'lar: aynı hata Go, Node.js ve Python'da

`h2` anlaşan HTTP istemcileri Chrome ile aynı biçimde hata verir. Go'nun `http.Server` ve `http.DefaultTransport` bileşenleri HTTPS için HTTP/2'yi kendiliğinden kullanır (`GODEBUG=http2client=0` istemci tarafını kapatır). Node.js 24.22'de yerleşik `fetch` deneme sunucumuzla HTTP/1.1 konuştu; `allowH2: true` ile oluşturulan bir undici `Agent` ise HTTP/2 anlaştı. Python'da httpx için `pip install httpx[http2]` ve `httpx.Client(http2=True)` gerekir; HTTP/2 varsayılan olarak kapalıdır. `Content-Length` değeri 100 bayt vadedip 5 bayt gönderen bir cevap karşısında istemcilerimiz şunu bildirdi:

```text
# Node.js 24.22, node:http2
response: :status=200 content-length=100 content-type=text/plain
stream error: ERR_HTTP2_STREAM_ERROR Stream closed with error code NGHTTP2_PROTOCOL_ERROR

# undici 7.30, allowH2: true
TypeError: terminated <- ERR_HTTP2_STREAM_ERROR: Stream closed with error code NGHTTP2_PROTOCOL_ERROR

# Python httpx 0.28, http2=True
h2.exceptions.InvalidBodyLengthError: InvalidBodyLengthError: Expected 100 bytes, received 5
```

Bir HTTP/2 protokol hatasını engel değil, bozuk cevap olarak ele alın: doğrulamak için bir kez HTTP/1.1 ile yeniden deneyin, sunucu sizinse düzeltin, değilse adresi ve başlıkları sahibine bildirin. IP adresi değiştirmenin yararı yoktur; her adres aynı bozuk cevabı alır.

Proxy bu tabloya nadiren girer. `https://` ile başlayan bir site için istemci proxy'den bir `CONNECT` isteğiyle tünel ister ve TLS'i, içindeki HTTP/2 ile birlikte, siteyle uçtan uca çalıştırır; proxy tek bir çerçeve bile görmez, bu yüzden bir [HTTPS Proxy](https://proxynet.io/tr/https-proxy) bu hataya ne yol açar ne de onu giderir. Yalnız kurumsal inceleme ağ geçidi gibi TLS'i bilerek sonlandıran bir proxy, kendi başına bir HTTP/2 ucudur.

İkinci bir çıkış noktası genel bir arızayı bölgesel olandan ayırır: isteği başka bir ülkedeki [Datacenter Proxy](https://proxynet.io/tr/datacenter-proxy) üzerinden tekrarlayın; orada da aynı hata çıkıyorsa cevap herkes için bozuktur, temiz bir cevap ise kendi ağınıza ya da inceleme yazılımınıza işaret eder.

## Benzer hatalar

| Kod | Numara | Anlamı |
|---|---|---|
| `ERR_HTTP2_PROTOCOL_ERROR` | -337 | Bir HTTP/2 kuralı bozuldu; istek iptal edildi |
| `ERR_HTTP2_SERVER_REFUSED_STREAM` | -351 | Sunucu akışı işlemeden reddetti; Chrome yeniden deneyebilir |
| `ERR_HTTP_1_1_REQUIRED` | -365 | Sunucu HTTP/1.1 istedi; Chrome isteği onunla yeniden gönderir |
| `ERR_QUIC_PROTOCOL_ERROR` | -356 | QUIC üzerindeki HTTP/3 bağlantısı koptu |

Bunun yerine `ERR_SSL_PROTOCOL_ERROR` görüyorsanız HTTP/2'ye sıra hiç gelmemiştir; o durumu [err_ssl_protocol_error Hatası Nedir, Nasıl Çözülür?](/tr/blog/err-ssl-protocol-error) yazısında anlattık.

## Bu hatayla nerelerde karşılaşırsınız?

- CDN ya da yük dengeleyici arkasındaki web uygulamalarında; tek bir API cevabı elle eklenmiş bir başlık taşır.
- HTTPS yeni açılmış ASP.NET ve diğer IIS uygulamalarında; IIS'te HTTP/2 yalnız TLS üzerinde vardır.
- Video servislerinin sayfalarında; sayfanın geri kalanı yüklenirken oynatıcının istekleri başarısız olur.

## Sık yapılan hatalar

- **Tarayıcı önbelleğinin tamamını tekrar tekrar temizlemek.** Yalnız hata veren sitenin çerezleri önemlidir, o da ancak sebep aşırı büyük başlıklarsa.
- **Sistem saatini düzeltmek.** Yanlış tarih bu kodu değil, sertifika uyarılarını üretir.
- **chrome://flags'te QUIC'i kapatmak.** O ayar HTTP/3 içindir; Chrome'da HTTP/2 için bir anahtar yoktur.
- **Scraper'da IP adresi döndürmek.** Cevap her adres için bozuktur.

## Karar rehberi

| Durumunuz | Ne yapmalı? |
|---|---|
| Tek site her cihazda ve her ağda hata veriyor | Site ya da CDN'i; sahibine haber verin, hata veren adresi gönderin |
| Tek bilgisayarda birçok site hata veriyor | Önce uzantılar, sonra antivirüsün web koruması, sonra VPN ya da filtreleme uygulamaları |
| Yalnız tek bir ağda çıkıyor | O ağda TLS incelemesi var; ağı yönetene sorun |
| Sayfa konsol hatalarıyla yarım yükleniyor | Sunucu 200'den sonra akışı sıfırladı; sahibi o cevabı incelemeli |
| Siteniz Cloudflare ya da yük dengeleyici arkasında | Kaynak sunucunun başlıklarını ve `Content-Length` değerini kenarınkiyle karşılaştırın |

## Sıkça sorulan sorular

### Android'de ERR_HTTP2_PROTOCOL_ERROR nasıl çözülür?

Chrome'u Play Store'dan güncelleyin, Wi-Fi ile mobil veri arasında geçiş yapın ve VPN ya da reklam engelleyici uygulamaları kapatın. Site mobil veride de hata veriyorsa sebep site ya da CDN'idir.

### Ziyaretçiler hata görürken sunucu günlüğü neden 200 OK yazıyor?

Çünkü durum satırı, akış sıfırlanmadan önce gönderilip günlüğe yazıldı. Uygulama 200 ile cevap verdi; sonra sunucu, bir CDN ya da tarayıcı cevabın geri kalanını bozuk buldu ve akışı iptal etti.

### Hata Cloudflare arkasındaki sitelerde daha mı sık çıkıyor?

Orada daha sık görünür, çünkü Cloudflare'in kenarı kaynak sunucuyla ziyaretçi arasında duran katı bir HTTP/2 ucudur. Tarayıcının doğrudan kaynaktan gelse göz yumabileceği bir cevap kenarda reddedilir.

### Chrome'da HTTP/2 kapatılabilir mi?

Hayır. Chrome ayarlarında HTTP/2 için bir anahtar yoktur; `chrome://flags` sayfasındaki QUIC ayarı HTTP/3 içindir. Denemeyi sunucu tarafında `curl --http1.1` ile `curl --http2` üzerinden yapın; istemci tarafında en hızlı ikinci görüş Firefox'tur.

### ERR_HTTP2_PROTOCOL_ERROR bilgisayarımın ele geçirildiğine işaret eder mi?

Çoğu zaman hayır; durumların büyük kısmı sitenin sunucusuna, CDN'ine ya da bilgisayarınızdaki güvenlik yazılımına çıkar.

### VPN ya da proxy ERR_HTTP2_PROTOCOL_ERROR hatasını giderir mi?

Sitenin cevabı bozuksa hayır; aynı çerçeveler hangi yoldan gelirse gelsin size ulaşır. VPN ya da inceleme yapan bir proxy çoğu zaman çözüm değil, sebeptir.

## Özet

`ERR_HTTP2_PROTOCOL_ERROR`, Chrome'un HTTP/2 bağlantısındaki bir çerçevenin protokol kurallarını bozduğunu gösterir; çoğu zaman site ya da CDN'i, bozuk biçimli bir cevaptan sonra isteği sıfırlamıştır: yasak bir başlık, sıkıştırılmış gövdeyle artık uyuşmayan bir `Content-Length` ya da aşırı büyük başlıklar. Ziyaretçi Gizli pencereyi, başka bir tarayıcıyı ve duraklatılmış VPN ya da antivirüsü dener; site sahibi cevabı HTTP/1.1 ile HTTP/2 üzerinden karşılaştırır ve HTTP/2'yi kapatmak yerine cevabı düzeltir. Birkaç konumdan kontrol için proxy türlerini [proxy sayfamızda](/tr/proxy) karşılaştırabilirsiniz.
