Proxy-Status, bir HTTP yanıtını işleyen aracı sunucuların ne yaptığını ve varsa karşılaştıkları hataları ortak bir veri biçiminde bildirir. Bu aracılar, içeriği farklı sunuculardan dağıtan bir CDN, istemci adına isteği ileten bir forward proxy veya kaynak sunucunun önünde çalışan bir reverse proxy olabilir. RFC 9209 ile tanımlanan bu yanıt alanı, özellikle bir proxy zincirinde hatanın hangi aracıda ve hangi aşamada oluştuğunu ayırt etmeye yardımcı olur.

HTTP durum kodu tek başına her zaman yeterli ayrıntıyı vermez. Örneğin 502 veya 504 yanıtı bir aracı tarafından üretilmiş olabilir; Proxy-Status ise aracı kimliğini ve bağlantı zaman aşımı, DNS hatası ya da bağlantıyı şifreleyen TLS protokolünde sertifika sorunu gibi daha belirli bir hata türünü bildirebilir.

Bu bilgi tanılamada güçlü bir ipucu verir, ancak kök nedeni tek başına kanıtlamaz. Alanın üretilmesi isteğe bağlıdır; bir aracı gerçekte yapmadığı bir işlemi yaptığını iddia edebilir veya hatalı bilgi üretebilir. Ayrıca hassas arka uç ya da ağ topolojisi ayrıntılarının dışarı açılmaması gerekir.

Proxy-Status Nasıl Çalışır?

Proxy-Status, her üyesi bir aracıyı tanımlayan bir listedir. Bir aracı yanıtı işlerken kendi üyesini listenin sonuna ekleyebilir; mevcut üyeleri kaldırmak üzere açıkça yapılandırılmadıysa bu üyeleri koruması önerilir. Böylece yanıt istemciye doğru ilerlerken zincirdeki birden fazla aracı aynı listede görülebilir. İç ağ ayrıntılarının sızmasını önlemek gibi bir gerekçe varsa aracı mevcut üyeleri kaldırabilir.

Liste Sırası Aracıların Zincirdeki Yerini Gösterir

Liste sırası, yanıtın aracı zincirinde hangi yönde işlendiğini anlamak için önemlidir. Listede bildirilen aracılar arasında kaynak sunucuya en yakın olan solda, tarayıcı gibi istemci uygulamasına en yakın olan sağda yer alır. Alan isteğe bağlı olduğu ve bazı üyeler kaldırılabildiği için bu liste bütün aracıların eksiksiz dökümü değildir. Bu nedenle aynı yanıtta birden fazla aracı görünüyorsa hata parametresinin hangi üyeye bağlı olduğuna bakmak gerekir.

Aşağıdaki örnekte ağ geçidi kaynak sunucuya bağlanmaya çalışırken zaman aşımına uğramış, uçtaki bileşen ise bu yanıtı istemciye iletmiştir:

Proxy-Status: gateway.example; error=connection_timeout; next-hop="origin.example:443", edge.example

Burada error değeri ağ geçidi üyesine aittir. Uçtaki üyenin listede bulunması yalnız o aracının yanıtı işlediğini gösterir; bu bilgi tek başına uç bileşende hata olduğunu göstermez.

Alanı Aracılar Üretir

RFC 9209, Proxy-Status alanını aracıların kullanımı için tanımlar ve kaynak sunucuların bu alanı üretmemesini gerektirir. Bir aracı alanı her yanıtta ekleyebilir, yalnız hata durumlarında etkinleştirebilir veya belirli bir tanılama koşuluna göre gönderebilir. Bu nedenle Proxy-Status bulunmaması, isteğin kesin olarak proxy kullanmadan işlendiği anlamına gelmez.

Proxy-Status Parametreleri Ne Anlatır?

Her aracı üyesine eklenebilen parametreler, hatanın yalnız türünü değil, aracının yanıtı almak için hangi sunucuyla iletişim kurduğunu da gösterebilir. RFC 9209'daki temel parametreler tanılama sırasında şu bilgileri verir:

ParametreTaşıdığı bilgiTanılamadaki kullanım
errorProxy hata türüSorunun DNS, bağlantı, TLS, HTTP veya aracının iç işleyişi gibi hangi sınıfa girdiğini gösterir.
next-hopSeçilen sonraki aracı veya kaynak sunucuAracının iletişim kurmaya çalıştığı sonraki aracıyı veya kaynak sunucuyu ana makine adı, IP adresi ya da takma adla gösterebilir.
next-protocolSonraki sunucuyla kullanılan protokolün ALPN kimliğiÖrneğin h2 değeri, sonraki sunucuyla HTTP/2 kullanıldığını bildirir; ALPN, uygulama protokolünü seçmekte kullanılan TLS uzantısıdır, ancak burada kimliği görmek ALPN görüşmesi yapıldığını kanıtlamaz.
received-statusSonraki sunucudan alınan HTTP durum koduAracının sonraki sunucudan hangi durum kodunu aldığını göstererek yanıtın nerede değişmiş olabileceğini anlamaya yardım eder.
detailsEk uygulama veya dağıtım ayrıntısıStandart parametrelerin ifade etmediği tanılama bilgisini taşıyabilir; hassas veri barındırabileceği için aracı bu parametreyi dikkatli kullanmalıdır.

Alıcılar tanımadıkları Proxy-Status parametrelerini yok saymalıdır. Bu yaklaşım alanın yeni parametrelerle genişletilebilmesini, mevcut istemcilerin bildikleri verileri işlemeye devam etmesini sağlar.

Hata Türleri Hangi Aşamayı İşaret Eder?

error değeri, genel bir "proxy hatası" ifadesi yerine sorunun görüldüğü aşamayı daha açık gösterir. RFC 9209 DNS çözümleme, hedefe bağlantı, TLS, HTTP yanıt işleme ve aracının kendi iç durumu için ayrı hata türleri tanımlar.

  • dns_timeout, sonraki sunucunun adı için IP adresi aranırken zaman aşımına uğranmasını; dns_error ise bu işlemde DNS hatası alınmasını bildirir.
  • connection_refused ve connection_timeout, sonraki sunucuya bağlantının reddedilmesi ile bağlantı kurma girişiminin zaman aşımına uğramasını ayırır.
  • tls_certificate_error, aracının sonraki sunucunun TLS sertifikasını doğrularken hata aldığını belirtir.
  • http_response_timeout, aracının tam HTTP yanıtını belirlenen süre içinde alamadığını gösterir.
  • proxy_internal_error, proxy_configuration_error ve proxy_loop_detected gibi değerler sorunun aracının kendi işleyişi veya yapılandırmasıyla ilişkili olduğunu gösterebilir.

Proxy-Status hata türlerinin tanımları uygun HTTP durum koduna ilişkin öneriler içerir; ancak gerçek yanıtta farklı bir kod görülebilir. Operatör bu nedenle durum kodu ile Proxy-Status değerini birlikte okumalı ve yalnız birine bakarak kök nedeni kesinleştirmemelidir.

Proxy Zincirindeki Hata Nasıl Araştırılır?

Proxy-Status en çok, aynı istek yolunda birden fazla CDN, ağ geçidi veya reverse proxy bulunduğunda anlam kazanır. Tanılama sırasında amaç, listedeki hangi üyenin hata bildirdiğini ve bu aracının hangi sunucuyla iletişim kurmaya çalıştığını belirlemektir.

  1. HTTP durum kodunu ve Proxy-Status listesinin tamamını birlikte kaydedin.
  2. error parametresi taşıyan üyeyi bulun ve bu üyenin zincirdeki konumunu belirleyin.
  3. Varsa next-hop, next-protocol ve received-status değerlerini aynı üye bağlamında yorumlayın.
  4. Belirlediğiniz aracıda aynı isteğe ait günlükleri, performans ölçümlerini ve isteğin bileşenler arasında izlediği yolu gösteren kayıtları inceleyerek Proxy-Status bilgisini doğrulayın.
  5. Proxy-Status ile diğer tanılama kayıtları uyuşmuyorsa yalnız Proxy-Status bilgisini doğru kabul etmeyin; yapılandırmayı ve yanıtın hangi bileşen tarafından değiştirildiğini kontrol edin.

Örneğin istemci 504 alıyor ve ağ geçidi üyesi connection_timeout bildiriyorsa ilk inceleme noktası istemci ile CDN arasındaki bağlantı değil, ağ geçidinin sonraki sunucuyla bağlantı kurma girişimidir. Yine de bunun ağ erişimi, arka uç hizmetinin kapasite sınırına ulaşması veya başka bir altyapı koşulundan hangisi olduğunu yalnız Proxy-Status belirleyemez.

Proxy-Status ile Hassas Bilgi Sızıntısını Önleme

Proxy-Status içindeki ana makine adı, IP adresi, arka uç adı ve ayrıntılı hata metni saldırgana iç topoloji veya yapılandırma hakkında bilgi verebilir. Bu nedenle aracılar alanı hiç üretmemeyi, yalnız yetkili tanılama isteklerinde üretmeyi veya dışarıya açık yanıtlarda hassas parametreleri kaldırmayı seçebilir.

Aracı, details gibi serbest metin içeren parametrelerde iç dosya yollarını, anahtarları, servis adlarını veya gereksiz hata ayrıntılarını yayımlamamalıdır. Operatör, next-hop değerinin dış kullanıcıya gerçekten gerekli olup olmadığını da ayrı değerlendirmelidir.