Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Go'da HTTP Client: http.Client, Timeout'lar, context ile İptal, Transport'u Yeniden Kullanmak ve Retry
Go'da http.DefaultClient'ın timeout'u yoktur; üretimde paylaşılan tek bir http.Client, her aşama için Transport timeout'ları, deneme başına Client.Timeout ve toplam bütçe için context kullanılır. Hangi timeout'un hangi aşamayı kapsadığı, Go 1.27'nin küçük body'leri Close'ta okuyup bağlantıyı geri kazanması, MaxIdleConnsPerHost, 4xx/5xx kontrolü, backoff, jitter ve Retry-After ile retry, idempotency ve httptest ile client testi.
net/http ile HTTP Server: ServeMux Pattern Routing, Handler, Middleware ve Timeout'lar
Go'da bir HTTP servisi için standart kütüphane yeterli: ServeMux 1.22'den beri method ve wildcard pattern'lerini en spesifik olan kazanır kuralıyla eşliyor, middleware ise bir handler'ı saran sıradan bir fonksiyon. Bookstore API'sinin httpapi package'ına taşınması, RequestID ve Logging middleware'leri, CORS ve CrossOriginProtection, 307 redirect, pattern çakışması panic'i, WriteTimeout'un handler'ı durdurmaması ve slowloris'e karşı http.Server timeout'ları.
node:http ile Çıplak HTTP Server: Request/Response, Routing'i Elle Yazmak ve Neden Framework Gerekir
node:http, Node'da HTTP'nin en alt katıdır: body'yi boyut limitiyle okumak, routing, validation ve hata yönetimi senin işindir; async bir handler'daki tek bir hata bile process'i kapatabilir. Gerçek çıktılarla çöken sunucu, stream olarak okunan JSON body ve 413/415/422 cevapları, elle yazılmış router, client gidince durdurulan worker, :: üzerinde dinleyen listen(), slowloris'e 408 dönen headersTimeout ve 413'ten sonra açık kalan bağlantı.