Kurum Servisinden dönen yanıtın boyutuna göre işlem yapabilir miyim (Response Size (bytes))?
Kısa cevap
Evet, HTTP vService'te ve yalnızca yanıt aşamasında. Response Size (bytes) koşulu yanıt gövdesinin boyutunu Less than, Equals to, Greater than ya da Range operatörüyle bayt cinsinden bir tam sayıyla karşılaştırır; başlıklar sayılmaz ve değer Kurum Servisinin bildirdiği Content-Length'ten okunur. Koşul yalnızca Execution Level alanı On Response olan action'larda listelenir: yanıta başlık eklemek ya da değiştirmek (Add HTTP Header, Set HTTP Header), yanıtı engellemek (Block) ya da kaydı loga yazmamak (Conditional Silent Log) için kullanılır. Yanıt geldiğinde Kurum Servisi seçimi yapılmış olduğundan Conditional Backend Services bloklarında yer almaz; istek aşamasında çalışan Bandwidth Limitation gibi action'larla da kullanılmaz.
Temel Bilgi
Bir HTTP yanıtı başlıklar ve gövdeden oluşur. Sunucu gövdenin boyutunu genellikle Content-Length başlığıyla önceden bildirir. Boyutu önceden bilinmeyen içerik ise parça parça (Transfer-Encoding: chunked) gönderilir; bu durumda toplam boyut ancak yanıtın sonunda belli olur.
Sorun: Yanıtın Boyutu İstek Geldiğinde Bilinmiyor
Büyük dosya indirmelerine ayrı başlıklar eklemek, beklenenden büyük yanıtları istemciye iletmemek ya da çok küçük yanıtları log dışı bırakmak istenebilir. Yanıtın boyutu ancak Kurum Servisi yanıt verdikten sonra bilinir; bu yüzden karar istek aşamasında değil, yanıt aşamasında çalışan action'larla verilir. İsteği hangi Kurum Servisinin karşılayacağı ise yanıt gelmeden seçildiği için yanıt boyutuna göre değiştirilemez (Backend yanıt süresine veya yanıt durum koduna göre karar verebilir miyim?).
Çözüm: Üç Yöntem
Üç yöntem aynı Response Size (bytes) koşulunu farklı On Response action'larına bağlar ve birlikte de uygulanır.
| Durumunuz | Uygun yöntem |
|---|---|
Belirli boyuttaki yanıtlara başlık eklemek ya da başlığı değiştirmek istiyorum (ör. büyük dosyalarda Cache-Control) | Yöntem 1: Add HTTP Header / Set HTTP Header (On Response) |
| Beklenenden büyük yanıtların istemciye iletilmemesini istiyorum | Yöntem 2: Block (On Response) |
| Belirli boyuttaki yanıtların loga yazılmamasını istiyorum | Yöntem 3: Conditional Silent Log (On Response) |
Yöntem 1: Add HTTP Header / Set HTTP Header (On Response) Önerilen
- Nasıl çalışır Kurum Servisinin yanıtı geldiğinde gövde boyutu koşulla karşılaştırılır; koşul sağlanırsa yanıt istemciye iletilmeden önce başlık eklenir ya da değiştirilir.
- Nerede açılırLoad Balancer → Conditions → Response Size (bytes) · Load Balancer → Actions · vService formu → Details → Actions
- Gereksinim Kurum Servisinin
Content-Lengthbildiren yanıtlar döndürmesi - vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add ile koşul formu açılır (nasıl eklenir).
Condition Name girilir (ör. yanit-1mb-ustu), Criteria = Response Size (bytes) seçilir. Operator alanı Equals to seçili ve değeri boş açılır; operatör seçilip bayt cinsinden tam sayı girilir:
| Operatör | Örnek | Eşleşen yanıt |
|---|---|---|
| Greater than | 1048576 | Gövdesi 1 MB'tan büyük |
| Less than | 1024 | Gövdesi 1 KB'tan küçük |
| Range | 102400 - 1048576 | Gövdesi 100 KB ile 1 MB arası, iki sınır dahil |
| Equals to | 0 | Gövdesi boş |
Add butonuna tıklanır.
Load Balancer → Actions → Add adımları izlenir.
Action Name girilir, Action Type = Add HTTP Header (başlık eklemek için) ya da Set HTTP Header (başlığın değerini değiştirmek için) seçilir. Execution Level = On Response seçilir; seçim yapılmazsa action istek aşamasında çalışır ve Response Size (bytes) koşulu Conditions listesinde görünmez. Execution Level kayıttan sonra değiştirilemez.
Header to Add ve Header Content alanlarına başlık adı ve değeri girilir (ör. Cache-Control · public, max-age=86400); Conditions alanında 2. adımdaki koşul seçilir.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List adımları izlenip HTTP vService açılır ve formun üstündeki Details butonuna tıklanır.
Actions alanında oluşturulan action seçilir.
Save butonuna tıklanır.
Doğrulama
Eşiğin üzerinde boyutu olan dosya istenip yanıt başlıklarına bakılır; komut, eşiğin altında boyutu olan bir dosyanın adresiyle tekrarlanır.
curl -s -o /dev/null -D - http://203.0.113.10/indir/buyuk.zipBüyük dosyanın yanıtında Cache-Control: public, max-age=86400 · küçük dosyada yokYöntem 2: Block (On Response)
- Nasıl çalışır Koşula uyan yanıt istemciye iletilmez; istemci action'da seçilen durum koduyla (varsayılan 403) karşılanır ya da Silent Drop seçiliyse yanıt almaz.
- Nerede açılırLoad Balancer → Actions · vService formu → Details → Actions
- Gereksinim Yöntem 1'in 1–3. adımlarında oluşturulan Response Size (bytes) koşulu
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add adımları izlenir.
Action Type = Block ve Execution Level = On Response seçilir. Deny Type alanında Standard ya da Silent Drop seçilir (Tarpit yanıt aşamasında sunulmaz); Standard'da Status Code belirlenir. Conditions alanında Response Size (bytes) koşulu seçilir; yalnızca belirli bir yolu kapsamak için Path koşuluyla and ile birleştirilir.
Add butonuna tıklanır.
Yöntem 1'in 8–10. adımları uygulanır.
Doğrulama
Eşiğin üzerinde boyutu olan bir yanıt istenir.
curl -sI http://203.0.113.10/api/exportHTTP/1.1 403 (Standard, varsayılan kod) · eşiğin altındaki yanıtlar değişmeden dönerYöntem 3: Conditional Silent Log (On Response)
- Nasıl çalışır Koşula uyan yanıtın kaydı vService'in HTTP loglarına yazılmaz; yanıtın kendisi değişmeden istemciye iletilir.
- Nerede açılırLoad Balancer → Actions · vService formu → Details → Actions
- Gereksinim Yöntem 1'in 1–3. adımlarında oluşturulan Response Size (bytes) koşulu
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add adımları izlenir.
Action Type = Conditional Silent Log ve Execution Level = On Response seçilir; alan değiştirildiğinde Conditions alanı sıfırlandığından koşul bu seçimden sonra eklenir. Conditions alanında Response Size (bytes) koşulu (ör. Equals to 0) seçilir.
Add butonuna tıklanır.
Yöntem 1'in 8–10. adımları uygulanır.
Doğrulama
Koşula uyan bir istek gönderildikten sonra vService'in Logs & Tracking → HTTP Logs ekranında Refresh tıklanır.
Koşula uyan yanıtın kaydı listede yok; diğer istekler kaydedilirSık Yapılan Hatalar
Content-Length bildirmeyen yanıtlar
Kurum Servisi yanıtı Content-Length olmadan parça parça (chunked/streaming) gönderiyorsa toplam boyut bilinmez; değer o ana kadar alınan veriyi yansıtır. Bu yanıtlar Less than eşiklerinde yanlışlıkla eşleşebilir, Greater than ve Range eşiklerinde ise eşleşmeyebilir. Boyut koşulu yalnızca Content-Length bildiren yanıtlar için güvenilirdir.
- Execution Level'ı On Request'te bırakmak. Response Size (bytes) koşulu yalnızca yanıt aşamasında değerlendirilir; Execution Level On Response seçilmeden koşul Conditions listesinde görünmez. Alan kayıttan sonra değiştirilemez; yanlış seçildiyse yeni action tanımlanır.
- Yanıt boyutuna göre Kurum Servisi seçmeye çalışmak. Kurum Servisi istek aşamasında seçilir; Conditional Backend Services bloklarında yanıt aşamasındaki koşullar listelenmez.
- Büyük indirmelere Bandwidth Limitation uygulamaya çalışmak. Bandwidth Limitation yalnızca istek aşamasında çalışır ve yanıt aşamasındaki koşulları kabul etmez; indirme hızını yanıt boyutuna göre sınırlamak bu koşulla yapılamaz.
- Başlıkların da sayıldığını sanmak. Değer yalnızca gövde boyutudur; yanıt başlıkları dahil değildir.
- İstek boyutu koşulunu karıştırmak. İstemciden gelen isteğin boyutu için Request Size (bytes) koşulu kullanılır (Büyük boyutlu istekleri (ör. belirli bir boyutun üzerini) engelleyebilir miyim?).
Dokümantasyonda nasıl yapılır
