HTTP Header
HTTP Header Koşulu Nedir?
HTTP Header koşulu, HTTP isteğinin veya yanıtının başlık (header) bilgilerini değerlendirerek trafik yönlendirme ve manipülasyon kararları almak için kullanılan bir koşul tipidir.
HTTP başlığı, istemci (tarayıcı, mobil uygulama vb.) ile sunucu arasında yapılan HTTP istekleri (request) ve yanıtları (response) sırasında taşınan ek meta bilgileridir. HTTP başlıkları verinin kendisi değil, verinin nasıl gönderileceğini, nasıl işleneceğini ve nasıl yorumlanacağını anlatır.
HTTP başlıkları, istek ve yanıt meta verilerini taşır.
Örnek İstek (Request) HTTP Başlıkları
GET /api/users HTTP/1.1
Host: www.tr7.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer token123Örnek Cevap (Response) HTTP Başlıkları
Content-Type: application/json
Content-Length: 348
Cache-Control: max-age=3600
Server: Apache/2.4.59 (Debian)
Set-Cookie: sessionid=abc123Bu koşul, hem istek (request) hem de yanıt (response) başlıklarını kontrol edebilir.
HTTP Header Koşulunun Önemi
HTTP başlıkları, istemci bilgileri, kimlik doğrulama, içerik türü ve önbellek direktifleri gibi kritik bilgiler taşır.
HTTP Header koşulu sayesinde;
- Host başlığına göre virtual hosting yapılabilir,
- User-Agent ile tarayıcı/cihaz tespiti yapılabilir,
- Authorization başlığı ile kimlik doğrulama kontrolleri yapılabilir,
- Custom header'larla özel routing senaryoları uygulanabilir,
- Content-Type'a göre farklı işlemler yapılabilir.
Bu yönüyle HTTP Header koşulu, en esnek ve güçlü koşul tiplerinden biridir.
Kullanılabildiği vService Tipleri
Nasıl Eklenir?
Yeni bir HTTP Header Koşulu, TR7 web yönetim arayüzü üzerinden aşağıdaki adımlar izlenerek eklenebilir:
- Sol altta bulunan TR7 logosuna tıklanarak Configuration Menu açılır.
- Load Balancer → Conditions → Add adımları takip edilir.
- Criteria olarak HTTP header seçilir.
- Koşula ait ilgili konfigürasyonlar yapılandırılır.
Addbutonuna tıklanarak koşul eklenir.
HTTP Header Koşulu Ekleme Formu
HTTP Header Koşulu Ekleme Formu
INFO
Condition Name
Oluşturulacak koşul için isteğe bağlı bir isim girilebilir.
Bu alan, özellikle aşağıdaki senaryolarda önemlidir:
- Aynı vService altında çok sayıda koşul tanımlandığında,
- Benzer kriterlere sahip koşulların ayırt edilmesi gerektiğinde,
- Koşulun hangi iş kuralını temsil ettiğinin hızlıca anlaşılması istendiğinde.
Bu alan boş bırakıldığında, TR7 ilgili koşulun içeriğini analiz ederek Condition Description alanında otomatik ve açıklayıcı bir isim oluşturur. Oluşturulan bu açıklama, koşul listelerinde isim olarak kullanılır.
INFO
Criteria Zorunlu
Koşulun tipini belirleyen alandır; aranabilir açılır listeden HTTP header seçilir. Bu seçim, formda görüntülenecek alanları belirler. Kriter, koşul kaydedildikten sonra değiştirilemez: farklı bir kritere ihtiyaç duyulursa yeni bir koşul tanımlanır. Listedeki tüm kriterler ve kapsamları için Conditions sayfasındaki kriter kataloğuna bakılabilir.
INFO
Content Matching Method Varsayılan: Exact match
İçeriğin nasıl eşleştirileceğini belirler. Alan, formda etiketsiz bir açılır liste olarak Criteria'nın hemen altında görünür ve Exact match seçili açılır.
| Seçenek | Açıklama |
|---|---|
| Exact match | Değer birebir eşleşmelidir. |
| Start | Değer belirtilen metinle başlamalıdır. |
| End | Değer belirtilen metinle bitmelidir. |
| Includes | Değer belirtilen metni içermelidir. |
| Regex | Değer düzenli ifadeyle eşleşmelidir. |
| Is present | Yalnızca varlık kontrolü sağlanır. (değer önemli değil) |
TIP
Is present seçildiğinde, başlığın yalnızca var olup olmadığı kontrol edilir; değeri önemli değildir. Bu seçimde Query ve Case Insensitive alanları gizlenir.
Örnek: Authorization başlığının varlığı kontrolü.
INFO
Case Insensitive Varsayılan: Kapalı
Büyük/küçük harf duyarlılığını kontrol eder.
- Aktif:
example,EXAMPLE,Exampleaynı kabul edilir - Aktif Değil: Tam eşleşme gerekir (varsayılan)
TIP
URL path'leri ve header adları genellikle case-insensitive işlenmeli, değerler ise case-sensitive kalmalıdır.
TIP
HTTP/1.x'te header adları case-insensitive'dir (RFC 7230). Ancak değerler genellikle case-sensitive'dir.
INFO
Header Name Zorunlu
Kontrol edilecek HTTP başlığının adı bu alana girilir. Başlığın yönü, alanın solundaki seçiciden Request veya Response olarak belirlenir; form, Request seçili ve Host yazılı olarak açılır. Bu kriterde ayrı bir Condition level alanı yoktur: istek/yanıt ayrımı yalnızca bu seçicide yapılır.
Request
HTTP istek başlıkları için seçilir.
Yaygın istek başlıkları:
| Başlık | Açıklama |
|---|---|
Host | Hedef domain |
User-Agent | Tarayıcı/cihaz bilgisi |
Authorization | Kimlik doğrulama |
Content-Type | İstek içerik türü |
Accept | Kabul edilen içerik türleri |
X-Forwarded-For | Proxy arkası gerçek IP |
Cookie | Çerez bilgileri |
Response
HTTP yanıt başlıkları için seçilir.
Yaygın yanıt başlıkları:
| Başlık | Açıklama |
|---|---|
Content-Type | Yanıt içerik türü |
Cache-Control | Önbellek direktifleri |
Set-Cookie | Çerez ayarlama |
Location | Yönlendirme hedefi |
TIP
Header adı yazarken, TR7 yaygın başlık isimlerini otomatik tamamlama olarak önerir; öneri listesi, seçili yöne (Request/Response) göre değişir. Özel (custom) başlık isimleri de manuel olarak girilebilir.
WARNING
Response seçilen bir başlık koşulu yalnızca yanıt aşamasında değerlendirilen kural ve aksiyonlarda kullanılmalıdır; istek aşamasındaki bir kullanımda başlık değeri henüz oluşmadığından koşul hiçbir zaman eşleşmez.
INFO
Query Zorunlu
Eşleştirilecek olan değer bu alana girilir. Seçilen eşleştirme yöntemine göre:
- Exact match: Değerin birebir karşılığını kontrol eder.
- Start: Aranacak metin parçasının başlangıcını kontrol eder.
- End: Aranacak metin parçasının bitişini kontrol eder.
- Includes: Aranacak metin parçasının içinde geçme durumunu kontrol eder.
- Regex: Düzenli ifade deseni (Regex) ile kontrol eder.
TIP
Is present seçildiğinde bu alan gizlenir.
Örnek değerler:
www.tr7.com: Host başlığı içinapplication/json: Content-Type için^Bearer\s+: Authorization regex
INFO
Condition Description
Girilen kriter ve değerler doğrultusunda TR7 tarafından otomatik olarak oluşturulur.
Bu açıklama;
- Koşulun hangi değer için geçerli olduğunu,
- Hangi kriter üzerinden çalıştığını,
- Listeleme ekranlarında koşulun hızlıca anlaşılmasını
sağlayacak şekilde sistem tarafından dinamik olarak üretilir.
INFO
Form Butonları
Add
Add butonuna tıklanarak koşul ekleme işlemi tamamlanır.
Add & Repeat
Add & Repeat butonu ile koşul ekleme işlemi tamamlanır ve farklı konfigürasyonlarla ilgili pencereden çıkılmadan yeni bir koşul daha eklenebilir.
Koşul Eklendi
Operasyonel Kullanım Önerileri
- Virtual Hosting için Host Başlığını Kullanın. Aynı IP üzerinde birden fazla domain için Host başlığına göre yönlendirme yapın.
- X-Forwarded-For'u Güvenle Kullanın. Proxy/CDN arkasındaki gerçek IP için X-Forwarded-For kullanın, ancak spoofing riski olduğunu unutmayın.
- Custom Header'lar için Standart Prefix Kullanın. Özel header'lar için
X-prefix'i kullanın (örn.X-Custom-Header). - Response Header'ları Response Aşamasında Kullanın. Response header'ları yalnızca Kurum Servisi yanıt verdikten sonra oluşur; istek aşamasındaki bir kuralda kullanılan Response başlık koşulu hiçbir zaman eşleşmez.
Canlı Ortamlarda Yaygın Kullanım Senaryoları
Aşağıdaki örnekler, ilgili koşulun gerçek sistemlerde en sık karşılaşılan kullanım senaryolarında nasıl uygulandığını göstermektedir. Bu senaryolar, canlı ortamlarda yaygın olarak tercih edilen ve sahada edinilmiş deneyimlere dayanan pratikleri temel alır.
Senaryo 1: Virtual Hosting ile Multi-Domain Yönetimi
Kullanım Amacı: Aynı IP adresi ve vService üzerinde birden fazla domain'e hizmet vermek ve Host başlığına göre farklı Kurum Servislerine yönlendirme yapmak.
Konfigürasyon:
- Content Matching Method: Exact match
- Case Insensitive: işaretli
- Header Name: Request →
Host - Query:
www.tr7.com
İlgili: Conditional Backend Services ile Host'a göre farklı Kurum Servisine yönlendirme yapılır.
Senaryo 2: API Kimlik Doğrulama Kontrolü
Kullanım Amacı: API endpoint'lerine erişim için Authorization başlığının varlığını kontrol etmek ve yetkisiz erişimleri engellemek.
Konfigürasyon:
- Content Matching Method: Is present
- Header Name: Request →
Authorization
Aksiyon Önerileri:
- ✅ Block → Authorization başlığı olmayan istekler 401 Unauthorized ile engellenir (Path koşulu ile birlikte:
/api/private/). - ✅ Show Content → "Authentication required" özel uyarı sayfası gösterilir.
- ✅ Quarantine → Tekrarlayan yetkisiz erişim denemeleri (>10 deneme) 30 dakika boyunca karantinaya alınır.
Senaryo 3: Mobil Cihaz Tespiti ve Optimizasyon
Kullanım Amacı: User-Agent başlığından mobil cihazları tespit edip mobil optimize edilmiş içeriğe yönlendirmek ve mobil kullanıcı deneyimini iyileştirmek.
Konfigürasyon:
- Content Matching Method: Includes
- Case Insensitive: işaretli
- Header Name: Request →
User-Agent - Query:
Mobile
Aksiyon Önerileri:
- ✅ Set Path → Ana sayfa (
/) istekleri mobil versiyona (/m/) yönlendirilir. - ✅ Add HTTP Header →
X-Device-Type: mobileheader'ı eklenir, Kurum Servisi mobil optimize yanıt verir.
Senaryo 4: JSON API İstek Validasyonu
Kullanım Amacı: API endpoint'lerine gelen isteklerin Content-Type başlığını kontrol ederek yalnızca JSON formatında istek kabul etmek ve hatalı istekleri engellemek.
Konfigürasyon:
- Content Matching Method: Includes
- Header Name: Request →
Content-Type - Query:
application/json
Aksiyon Önerileri:
- ✅ Block → POST/PUT istekleri Content-Type
application/jsondeğilse 400 Bad Request ile engellenir (Path koşulu:/api/). - ✅ Add HTTP Header →
X-Content-Validated: trueheader'ı eklenir, JSON validasyonu başarılı olduğu işaretlenir.
Senaryo 5: Referer Bazlı Hotlink Koruması
Kullanım Amacı: Referer başlığını kontrol ederek statik dosyaların (resim, video) başka sitelerden doğrudan linklenmesini (hotlink) engellemek ve bant genişliği hırsızlığını önlemek.
Konfigürasyon:
- Content Matching Method: Includes
- Header Name: Request →
Referer - Query:
tr7.com
Aksiyon Önerileri:
- ✅ Block → Referer
tr7.comiçermiyorsa statik içerik istekleri 403 Forbidden ile engellenir (Path koşulu:/images/,/videos/). - ✅ Show Content → "Direct linking not allowed" uyarı sayfası gösterilir.
Senaryo 6: API Versiyon Yönlendirmesi
Kullanım Amacı: Custom X-API-Version başlığına göre farklı API versiyonlarına yönlendirme yapmak ve API versiyonlamasını yönetmek.
Konfigürasyon:
- Content Matching Method: Exact match
- Header Name: Request →
X-API-Version - Query:
v2
Aksiyon Önerileri:
- ✅ Set Path → API path'ine versiyon prefix'i eklenir (
/v2/endpoint), Kurum Servisi doğru versiyonu işler. - ✅ Add HTTP Header → Eski versiyon (v1) için
X-API-Deprecated: trueheader'ı eklenir, kullanım dışı uyarısı verilir.
