نه. یک کلاینت می‌تواند فایل بزرگی را در بافرهای کوچک بخواند و آن را با Content-Length شناخته‌شده بفرستد. خواندن‌های محدود مصرف حافظه را کنترل می‌کنند؛ قالب‌بندی HTTP به گیرنده می‌گوید بدنهٔ درخواست کجا پایان می‌یابد.

فایل پایدار که کتابخانهٔ HTTP طول بایتی آن را می‌داند با مولدی که مقدار نامعلومی داده تولید می‌کند متفاوت است. برای هر دو منبع از رابط بدنهٔ پشتیبانی‌شدهٔ کتابخانه استفاده کنید. لازم نیست کل فایل را فقط برای ارائهٔ طول در یک رشته سرهم کنید.

برای HTTP/1.1، قالب‌بندی‌ای را که واقعاً فرستاده می‌شود بررسی کنید: Content-Length یا کدگذاری انتقال قطعه‌ای بر پایهٔ قواعد پروتکل. کدگذاری قطعه‌ای نشانگرهای اندازه را بیرون از محتوای فایل می‌افزاید. فیلدهای قالب‌بندی متناقض را با هم ترکیب نکنید و برای مجاب کردن پراکسی به پذیرش آپلود، طول را حدس نزنید.

اگر آپلودی که از پراکسی می‌گذرد شکست خورد، نسخهٔ HTTP، منبع بدنه و نخستین رد را ثبت کنید. پاسخ 411 به تحقیقی متفاوت از بسته‌شدن اتصال در میانهٔ بدنه اشاره دارد. اگر در عوض تلاش‌های مجدد احراز هویت شکست خوردند، بررسی کنید آیا بدنهٔ آپلود قابل پخش دوباره است. تغییر اندازهٔ بافر خواندن برنامه می‌تواند قالب‌بندی درخواست را دقیقاً همان‌طور که بود رها کند.

مسیر برای این مشاهده مهم است. ارسال متن ساده قالب‌بندی HTTP آپلود را در برابر پراکسی آشکار می‌کند؛ HTTPS متعارف سرتاسری آن را درون تونل می‌گذارد. HTTP/2 از قالب‌بندی خودش استفاده می‌کند. بنابراین محدودیت‌های تاریخی Squid شکست‌های قدیمی مشخصی را توضیح می‌دهند، نه قاعده‌ای که هر پراکسی امروزی آپلودهای جریانی را رد کند.

مقالات مرتبط