Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Compression ve Arşivler: GZip, Brotli, ZipArchive'ın Async API'leri ve Zip Slip
Büyük bir zip'i kullanıcıya göndermek için dosya ya da MemoryStream gerekmez: ZipArchive'ın Create modu entry'leri doğrudan response body'ye yazar, ama .NET 10'un async ZIP API'leri her entry'nin sonunu hâlâ senkron yazdığı için Kestrel'de buna ayrıca izin vermek gerekir. GZip, ZLib, Deflate ve Brotli'yi seviyeleriyle ölçüyor, zip ile tar.gz'yi karşılaştırıyor ve yüklenen zip'i Zip Slip ve zip bomb'a karşı güvenle açıyoruz.
.NET 11 ile I/O ve Serialization: Union Serialization, JSON Lines, In-Memory Stream'ler ve Zstandard
.NET 11'de System.Text.Json C# 15 union'larını sarmalayıcı olmadan serialize ediyor ve SerializeAsyncEnumerable ile JSON Lines yazıyor; System.IO.Compression'a Zstandard, ZIP'e parola ve CRC32 doğrulaması geldi. Yeni in-memory stream'leri, closed hierarchy polymorphism'ini ve eski testleri kırabilecek iki davranış değişikliğini (boş GZip artık 20 byte, bozuk zip entry'si artık exception) .NET 10 ile karşılaştırarak gösteriyoruz.