Sözde bir PDF veya elektronik tablo HTTP/1.1 200 OK ile başlıyorsa, indirici dosya yerine ham bir yanıt kaydetmiştir. Bu şematik yanıt yalnızca dört bayt içerik barındırır:

HTTP/1.1 200 OK
Transfer-Encoding: chunked

4
DATA
0

Dosya DATA. Durum satırı, başlıklar, boyut işareti ve bitiş yapısı HTTP'ye aittir. Başlık uzunlukları değiştiği için sabit sayıda bayt silmek güvenli değildir. İlk boş satırdan sonraki her şeyi kopyalamak yine de parça çerçevelemesini bırakır ve bilgilendirici yanıtlar nihai yanıttan önce gelebilir.

Normal bir indirme için ham soketten dosyaya kopyalamayı HTTP istemcisinin yanıt gövdesi arayüzüyle değiştirin. Proxy'sini yapılandırın, nihai durumu doğrulayın ve gövdeyi geçici bir çıktıya aktarın. İstemci mesaj çerçevelemesini yönetir: uzunlukla sınırlanan, parçalı (chunked) ve bağlantıyla sınırlanan gövdeler farklı ayrıştırma gerektirir.

İçerik kodlaması ayrı bir katmandır. İstemcinin belgelenmiş davranışını kullanarak çözülmüş dosya baytlarına mı yoksa açıkça istenen ham içeriğe mi ihtiyacınız olduğuna karar verin. Sıkıştırılmış baytlar otomatik olarak proxy bozulması değildir.

Uygulama soket düzeyinde kod tutmak zorundaysa, tüm bu ayrıştırma kurallarından ve okuma-yazma işlemlerinden o sorumludur. Arabelleğin kapasitesini değil, okumanın gerçekte döndürdüğü bayt sayısını yazın ve kısmi yazmaları yönetin. Aksi halde eski arabellek içeriği doğru çıkarılmış bir gövdeyi bile bozabilir.

HTTPS, CONNECT yanıtını çıkarmaktan fazlasını gerektirir: tünel başarıyla kurulduktan sonra hedefe TLS kurun ve ardından iç HTTP yanıtını ayrıştırın. Proxy başlıklarından sonraki şifreli baytlar indirilebilir dosya değildir.

Başarısız veya tamamlanmamış çıktıyı geçici bir ad altında bırakın. Yalnızca aktarım ve dosya denetimleri başarılı olduktan sonra yayımlayın; boş olmayan bir dosya tam bir indirmeyi kanıtlamaz.

İlgili makaleler