Replace HTTP Header Content
Replace HTTP Header Content Aksiyonu Nedir?
Replace HTTP Header Content aksiyonu, HTTP trafiğindeki bir başlığın (header) içeriğini REGEX (düzenli ifade) ile eşleştirip yeniden yazmak için kullanılır.
Eşleşme sağlandığında başlığın TAMAMI yeniden yazılır
Bu aksiyon "eşleşen kısmı değiştirip gerisini bırakmaz". Düzenli ifade başlık değerinin herhangi bir yerinde eşleşirse, o değerin tamamı yeni içerikle değiştirilir.
Korunması istenen bölümler, düzenli ifadede yakalama grubuyla alınmalı ve yeni içerikte \1, \2 gibi referanslarla yeniden yazılmalıdır.
Örnek: Location: http://example.com/dashboard başlığında yalnızca protokolü değiştirmek için:
- Düzenli ifade:
^http://(.*)$: geri kalan kısım 1. gruba alınır - Yeni içerik:
https://\1: grup geri yazılır
Yakalama grubu kullanılmazsa başlığın geri kalanı kaybolur.
Bu aksiyon hem istek (request) hem de yanıt (response) aşamasında çalışabilir. Execution Level seçimine göre başlık içeriği, Kurum Servisine gönderilmeden önce istekte veya istemciye döndürülmeden önce yanıtta değiştirilir.
http://(.+) → Replacement https://\1(.+) → \1 ile domain ve path korunur, yalnızca protokol değişir.Set HTTP Header ile Farkı
Set HTTP Header aksiyonu başlığa sabit bir değer yazar; başlık yoksa oluşturur ve akıllı değişken kullanımını destekler.
Bu aksiyon ise başlığın mevcut değerini düzenli ifadeyle eşleştirerek yeniden yazar; başlık yoksa oluşturmaz ve akıllı değişken desteklemez. Mevcut değerin bir bölümünü korumak gerektiğinde bu aksiyon kullanılır.
Replace HTTP Header Content Aksiyonunun Önemi
Bazı senaryolarda başlığın mevcut değerine bakılarak yeniden yazılması gerekir. Düzenli ifade tabanlı değiştirme, yakalama gruplarıyla birlikte bu tür dönüşümler için güçlü bir araçtır.
Replace HTTP Header Content aksiyonu;
- Başlık değerlerinin bir bölümü korunarak yeniden yazılmasını sağlar,
- URL rewriting işlemleri için kullanılabilir (örn: Location başlığı),
- Domain veya protokol değişikliklerini kolaylaştırır,
- Cookie domain'lerinin dinamik olarak değiştirilmesini mümkün kılar,
- Birden fazla değer içeren başlıklarda seçici değişiklik yapılmasını sağlar.
Bu nedenle Replace HTTP Header Content aksiyonu, karmaşık başlık manipülasyonları için vazgeçilmez bir araçtır.
Eşleştirme Modları
Bu aksiyon iki farklı eşleştirme modu sunar:
| Mod | Açıklama |
|---|---|
| Replace whole header | Başlık değerinin tamamını tek parça olarak ele alır. Düzenli ifade değer içinde herhangi bir yerde eşleşirse değerin tamamı yeni içerikle değiştirilir. |
| Replace values separated by comma | Başlık değerini yalnızca virgülle ayrılmış parçalara böler ve her parçayı ayrı ayrı eşleştirir. Eşleşen parçanın tamamı yeni içerikle değiştirilir; diğer parçalar korunur. |
Mod Karşılaştırması: örnek
Başlık: Accept-Language: en-US, tr-TR, de-DE
REGEX: tr-TR · Replacement: en-GB
Replace whole header modu:
tr-TRifadesi değerin içinde bulunur → eşleşme sağlanır- Değerin tamamı yeni içerikle değiştirilir
- Sonuç:
Accept-Language: en-GB: diğer diller kaybolur
Replace values separated by comma modu:
- Her değer ayrı kontrol edilir:
en-US,tr-TR,de-DE tr-TReşleşir veen-GBolarak değiştirilir- Sonuç:
Accept-Language: en-US, en-GB, de-DE
Kullanılabildiği vService Tipleri
Çalışma Anı
Nasıl Eklenir?
Yeni bir Replace HTTP Header Content Aksiyonu, 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 → Actions → Add adımları takip edilir.
- Aksiyon için benzersiz ve açıklayıcı bir isim girilir.
- Action Type olarak Replace HTTP Header Content seçilir.
- Aksiyona ait ilgili konfigürasyonlar yapılandırılır.
- Conditions sekmesinden aksiyonun hangi koşul/koşullarda devreye gireceği belirlenir.
Addbutonuna tıklanarak aksiyon eklenir.
Replace HTTP Header Content Aksiyonu Ekleme Formu
Replace HTTP Header Content Aksiyonu Ekleme Formu
INFO
Execution Level
Aksiyonun hangi aşamada çalıştırılacağını belirler.
- On Request: Aksiyon, istek ilgili Kurum Servisine iletilmeden önce uygulanır. Bu seviye, istek üzerinde değişiklik yapılması veya Kurum Servisine ek bilgi iletilmesi gereken durumlarda kullanılır.
- On Response: Aksiyon, yanıt istemciye iletilmeden önce uygulanır. Bu seviye, istemciye gönderilen yanıt üzerinde düzenleme veya ekleme yapılması gereken durumlarda kullanılır.
INFO
Hit Counter Varsayılan: Kapalı
Hit Counter, aksiyonun her çalışmasını sayar (aksiyonun kendi koşuluyla birlikte değerlendirilir; Deny gibi sonlandırıcı aksiyonlarda bile sayım kaybolmaz). Aksiyon bazlı hız ve toplamlar, vService panosundaki Action Hits sekmesinde ve canlı istatistik ekranında görüntülenir; listelerde ayrıca bir kolon olarak görünmez. Sayaç kümülatiftir; elle sıfırlama arayüzü yoktur: sayılan aksiyon kümesi değiştiğinde veya vService yeniden yüklendiğinde sıfırdan başlar, geçmiş ise panoda hız (hit/s) olarak korunur.
Sayaç, aksiyonun koşulu sağlandığında artar; düzenli ifadenin gerçekten eşleşip eşleşmediğine bakmaz.
INFO
Set Variable on Hit
Aksiyon her çalıştığında değeri atanacak bir değişken adı girilebilir (isteğe bağlı; varsayılan boş). Ad; harf, rakam ve alt çizgiden oluşabilir (en fazla 32 karakter). Aksiyon tetiklendiğinde değişken 1 değerine atanır ve aynı vService'teki diğer koşul ve aksiyonlarda %TR7VAR(ad) akıllı değişkeniyle okunarak zincirleme davranışlar kurulabilir.
INFO
Header to Replace Zorunlu
Değiştirilecek HTTP başlığının adı bu alana girilir.
Başlık adları büyük/küçük harf duyarsızdır.
Sıkça Değiştirilen Başlıklar
Location: Redirect URL'leriSet-Cookie: Cookie domain/path değerleriHost: Host adı değiştirmeRefresh: Yönlendirme URL'leri
INFO
Regex to Match Zorunlu
Eşleşme büyük/küçük harfe duyarlıdır
Düzenli ifade harf duyarlı çalışır ve formda bunu kapatan bir seçenek yoktur. Harf duyarsız eşleşme gerekiyorsa ifadenin başına (?i) yazılmalıdır.
Alanın yanındaki test butonuyla ifade örnek bir girdi üzerinde denenebilir; yakalama grupları listelenir ve yeni içerikte kullanılacak \1, \2 referansları buradan görülebilir.
Başlık değerinde aranacak REGEX (düzenli ifade) pattern'i bu alana girilir.
REGEX, PCRE (Perl Compatible Regular Expressions) söz dizimini destekler.
Yaygın REGEX Pattern'leri
| Pattern | Açıklama |
|---|---|
http:// | Protokol eşleştirme |
\.example\.com | Domain eşleştirme (noktalar escape edilmeli) |
^(.*)$ | Tüm değeri yakala (capture group) |
domain=([^;]+) | Cookie domain değerini yakala |
WARNING
- Özel karakterler (
.,*,?,+vb.) escape edilmelidir:\.,\* - Capture group'lar
\1,\2şeklinde referans edilebilir
INFO
Match Type Varsayılan: Replace whole header
Eşleştirme modunun seçildiği alandır.
- Replace whole header → Tüm başlık değerini REGEX ile eşleştirir. Düzenli ifade değerin herhangi bir yerinde eşleşirse değerin tamamı yeni içerikle değiştirilir.
- Replace values separated by comma → Başlık birden fazla değer içeriyorsa (virgülle ayrılmış), her değeri ayrı ayrı REGEX ile eşleştirir. Bu mod, çoklu değer içeren başlıklarda seçici değişiklik yapmak için kullanılır.
INFO
Replacement Content Zorunlu
WARNING
Bu alan akıllı değişkenleri desteklemez; yalnızca sabit metin ve \1–\9 yakalama grubu referansları kullanılabilir. Grup referansları $1 değil \1 biçiminde yazılır.
Eşleşme sağlandığında başlık değerinin tamamının yerine yazılacak yeni değer bu alana girilir.
Capture group'lardan yakalanan değerler \1, \2 şeklinde kullanılabilir.
Capture Group Kullanımı: örnek
REGEX: http://(.+) · Replacement: https://\1
Bu pattern, http:// ile başlayan URL'leri https:// olarak değiştirir ve domain kısmını korur.
- Giriş:
http://example.com/path - Çıkış:
https://example.com/path
INFO
Conditions
Bu alanda, ilgili aksiyonun hangi koşul veya koşullar sağlandığında devreye gireceği tanımlanır.
Bir veya birden fazla koşul eklenerek, and/or yapısı ile davranışın hedefli ve kontrollü şekilde uygulanması sağlanabilir.
Koşullar hakkında detaylı bilgi Conditions sayfasında yer alır.
WARNING
Bu alanda herhangi bir koşul tanımlanmazsa, ilgili aksiyon koşulsuz (Always) olarak çalışır. Bu durumda aksiyon, ilgili vService'e gelen tüm trafiğe uygulanır.
Canlı ortamlarda, koşul tanımlanmadan aksiyon kullanılması beklenmeyen durumlara (servis kesintilerine) yol açabilir. Bu nedenle aksiyon oluşturulurken mutlaka en az bir koşul tanımlanması önerilir.
INFO
Form Butonları
Add
Add butonuna tıklanarak aksiyon ekleme işlemi tamamlanır.
Add & Repeat
Add & Repeat butonu ile aksiyon ekleme işlemi tamamlanır ve farklı konfigürasyonlarla ilgili pencereden çıkılmadan yeni bir aksiyon daha eklenebilir.
Aksiyon Eklendi
Davranış Ayrıntıları
- Başlık yoksa oluşturulmaz; aksiyon sessizce geçilir.
- Düzenli ifade eşleşmezse başlık olduğu gibi bırakılır; hata üretilmez.
- Aynı ada sahip tüm başlık tekrarları ayrı ayrı işlenir.
- Aksiyon Kurum Servisinden dönen yanıtlara uygulanır; TR7'nin kendi ürettiği yanıtlar (yönlendirme, engelleme, hata sayfaları) etkilenmez.
- Aksiyonun vService başına sayı sınırı yoktur.
Düzenli ifadeyi sabitleyin
Beklenmeyen eşleşmeleri önlemek için ifade mümkün olduğunca ^ ve $ ile sabitlenmelidir. Sabitlenmemiş bir ifade, değerin ortasında geçen benzer bir metinle eşleşip başlığın tamamını yeniden yazabilir.
Operasyonel ve Güvenli Kullanım Önerileri
Doğru Modu Seçin.
Senaryo Önerilen Mod Tek değerli başlıklar (Location, Host) Replace whole header Çoklu değerli başlıklar (Accept-Language, Cookie) Replace values separated by comma Tüm değeri değiştirmek Replace whole header Belirli bir değeri değiştirmek Replace values separated by comma REGEX'i Test Edin. Karmaşık REGEX pattern'leri beklenmedik sonuçlar üretebilir. Canlı ortama almadan önce test ortamında doğrulayın.
Özel Karakterleri Escape Edin. REGEX'te özel anlam taşıyan karakterler (
.,*,?,+,[,],(,),^,$,|,\) ters slash ile escape edilmelidir:example.com→example\.com,path?query→path\?query.Capture group'ları kullanılır. Değerin bir kısmının korunması gerektiğinde ilgili bölüm
()ile yakalanır ve replacement alanında\1,\2ile referans verilir.Set Header'ı Düşünün. Eğer tüm başlık değerini bilinen bir değerle değiştirmek istiyorsanız, Set HTTP Header aksiyonu daha basit ve performanslı olabilir.
Canlı Ortamlarda Yaygın Kullanım Senaryoları
Aşağıdaki örnekler, ilgili aksiyonun 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: HTTP'den HTTPS'e Redirect URL Dönüştürme
Problem: Kurum Servisi SSL termination yapıldığını bilmiyor ve redirect URL'lerini hala http:// protokolü ile döndürüyor. Kullanıcı HTTPS ile gelip HTTP redirect alınca tarayıcı "Mixed Content" uyarısı veriyor ve güvenlik sorunu oluşuyor.
Çözüm: Location başlığındaki HTTP URL'lerini REGEX ile HTTPS'e çevirin ve protokol tutarsızlığını düzeltin.
Konfigürasyon:
- Execution Level: On Response
- Header to Replace:
Location - Regex to Match:
http://(.+) - Match Type: Replace whole header
- Replacement Content:
https://\1 - Conditions:
- Status Code
3xxile başlar ANDHTTP HeaderLocationvar
- Status Code
Sonuç:
- ✅ Protokol uyumluluğu → Tüm redirect URL'leri HTTPS olur.
- ✅ Mixed content çözümü → Tarayıcı uyarısı ortadan kalkar.
- ✅ Capture group →
(.+)ile domain ve path korunur, sadece protokol değişir. - ✅ SEO koruması → 301/302 redirect'lerde HTTPS kullanımı sağlanır.
Örnek Dönüşüm:
- Kurum Servisi:
Location: http://example.com/dashboard - TR7 değiştirme:
Location: https://example.com/dashboard
Senaryo 2: Cookie Domain Ayarlaması
Problem: Kurum Servisi internal domain (internal.example.com) ile cookie set ediyor. Ancak TR7'nin external domain'i farklı (example.com). Kullanıcılar external domain'den giriş yapıyor ama cookie internal domain'e ait olduğundan tarayıcı cookie'yi kabul etmiyor ve oturum açılamıyor.
Çözüm: Set-Cookie başlığındaki iç alan adı, çerezin geri kalanı yakalama gruplarıyla korunarak genel alan adına çevrilir.
Konfigürasyon:
- Execution Level: On Response
- Header to Replace:
Set-Cookie - Regex to Match:
(.*)domain=internal\.example\.com(.*) - Match Type: Replace whole header
- Replacement Content:
\1domain=.example.com\2 - Conditions:
- HTTP Header
Set-Cookievar
- HTTP Header
Sonuç:
- ✅ Cookie erişimi → Wildcard domain ile tüm subdomain'ler cookie'yi kullanabilir.
- ✅ Oturum sürekliliği → Internal-external geçişlerde oturum kopması olmaz.
- ✅ SSO uyumluluğu → Birden fazla subdomain arasında single sign-on çalışır.
- ⚠️ Yakalama grupları zorunlu → Çerezin adı, değeri ve diğer öznitelikleri
\1ve\2ile korunur; gruplar kullanılmazsa çerez içeriği tamamen kaybolur ve oturum düşer.
Örnek Dönüşüm:
- Kurum Servisi:
Set-Cookie: session=abc123; domain=internal.example.com; Secure - TR7 değiştirme:
Set-Cookie: session=abc123; domain=.example.com; Secure
Senaryo 3: Dahili URL'lerin Harici URL'lere Eşlenmesi
Problem: Kurum Servisi redirect yaparken internal hostname (internal-server:8080) kullanıyor ve bu URL istemciye dönüyor. İstemci bu internal hostname'i çözemediğinden redirect başarısız oluyor ve 404 hatası alınıyor. Ayrıca internal port numarası güvenlik açığı oluşturuyor.
Çözüm: Location başlığındaki internal URL'leri REGEX ile yakalayıp external public URL'e çevirin ve internal altyapıyı gizleyin.
Konfigürasyon:
- Execution Level: On Response
- Header to Replace:
Location - Regex to Match:
http://internal-server:8080/(.+) - Match Type: Replace whole header
- Replacement Content:
https://api.example.com/\1 - Conditions:
- Status Code
3xxile başlar ANDHTTP HeaderLocationinternaliçerir
- Status Code
Sonuç:
- ✅ URL mapping → Internal URL'ler hiç dışarı sızmaz.
- ✅ Güvenlik → Internal altyapı bilgisi korunur, port ve hostname gizlenir.
- ✅ Kullanıcı deneyimi → Redirect'ler doğru URL'e yönlendirir, 404 hatası ortadan kalkar.
- ✅ Path korunur →
(.+)capture group ile path kısmı\1olarak korunur.
Örnek Dönüşüm:
- Kurum Servisi:
Location: http://internal-server:8080/api/v1/status - TR7 değiştirme:
Location: https://api.example.com/api/v1/status
Senaryo 4: Port Numarası Kaldırma
Problem: Kurum Servisi redirect URL'lerinde gereksiz port numaraları (https://example.com:443/path veya http://example.com:80/path) kullanıyor. Bu standart olmayan URL'ler bazı client'larda sorun çıkarıyor ve URL'ler estetik açıdan kötü görünüyor. Analytics tool'ları farklı URL olarak algılıyor.
Çözüm: Location başlığındaki standart port numaraları (:80, :443) REGEX ile temizlenir ve clean URL biçimi sağlanır.
Konfigürasyon:
- Execution Level: On Response
- Header to Replace:
Location - Regex to Match:
(https?://[^/:]+):\d+(/.*)? - Match Type: Replace whole header
- Replacement Content:
\1\2 - Conditions:
- Status Code
3xxile başlar
- Status Code
Sonuç:
- ✅ URL temizliği → Standart portlar (
:80,:443) otomatik kaldırılır. - ✅ Analytics doğruluğu → Aynı sayfa farklı URL olarak loglanmaz.
- ✅ Tarayıcı uyumluluğu → Bazı eski tarayıcılarda port sorunları ortadan kalkar.
- ✅ İki capture group →
\1protocol+domain,\2path kısmını korur.
Örnek Dönüşüm:
- Kurum Servisi:
Location: https://example.com:443/dashboard?user=123 - TR7 değiştirme:
Location: https://example.com/dashboard?user=123
Senaryo 5: Host Başlık Subdomain Dönüşümü
Problem: Kurum Servisi www.* subdomain'leri kabul etmiyor, sadece docs.* subdomain'lerini anlıyor. Ancak kullanıcılar www.tr7.com ile geliyorlar. İstek Kurum Servisine gönderildiğinde Host başlığı www olduğundan 404 dönüyor.
Çözüm: Host başlığındaki www. prefix'ini REGEX ile docs. olarak değiştirin ve Kurum Servisinin beklediği formata çevirin.
Konfigürasyon:
- Execution Level: On Request
- Header to Replace:
Host - Regex to Match:
www\.(.*)\.com - Match Type: Replace whole header
- Replacement Content:
docs.\1.com.tr - Conditions:
- HTTP Header
Hostwwwiçerir ANDPath/docs/ile başlar
- HTTP Header
Sonuç:
- ✅ Host transformation →
wwwsubdomain'idocsolarak dönüştürülür. - ✅ TLD değişimi →
.comuzantısı.com.trolarak değiştirilir. - ✅ Capture group →
(.*)ile domain base kısmı korunur. - ✅ Koşullu uygulama → Sadece
/docs/path'leri için aktif olur, diğer trafiğe müdahale etmez.
Örnek Dönüşüm:
- İstemci isteği:
Host: www.tr7.com - TR7 değiştirme:
Host: docs.tr7.com.tr - Kurum Servisi bunu kabul eder ve doğru içeriği döner
