اعتبارسنجی مجدد یک دانلود از طریق پراکسی با Cache-Control: no-cache
پاسخ اعتبارسنجیشده بخواهید، بدون تغییر نشانی دانلود و بدون اشتباهگرفتن اعتبارسنجی مجدد با ممنوعیت ذخیرهسازی.
نشانی دانلود درست است، اما یک پراکسی اشتراکی هنوز پاسخی ذخیرهشده دارد. اگر عملیات به پاسخی نیاز دارد که با مبدأ اعتبارسنجی شود، آن شرط را روی درخواست بگذارید:
from urllib.request import ProxyHandler, Request, build_opener
import shutil
opener = build_opener(ProxyHandler({
"https": "http://proxy.example:8080",
}))
request = Request(download_url, headers={"Cache-Control": "no-cache"})
with opener.open(request, timeout=15) as response:
shutil.copyfileobj(response, output)
این قطعه فرض میکند که برنامه یک جریان خروجی دودویی دارد و یک download_url از نوع HTTPS فراهم میکند. برای آزمودن یک دانلود عمومی مجاز بدون احراز هویت پراکسی، از یک نامزد نقطه پایانی HTTP از فهرست پراکسیهای HTTP در opener استفاده کنید؛ شرط حافظه نهان درخواست یکسان میماند. نشانی اصلی منبع را حفظ میکند و در همان حال از حافظههای نهان روی مسیر درخواست میخواهد پیش از استفاده دوباره اعتبارسنجی کنند.
اعتبارسنجی میتواند بایتهای ذخیرهشده را دوباره به کار بگیرد
یک حافظه نهان منطبق که no-cache دریافت میکند نمیتواند این درخواست را از پاسخی ذخیرهشده و بدون اعتبارسنجی موفق با مبدأ برآورده کند. مبدأ میتواند تأیید کند که بازنمایی ذخیرهشده هنوز معتبر است، پس عملیات لازم نیست فایل بدون تغییر را دوباره از مبدأ بفرستد.
مقدار max-age=0 در یک درخواست یک حد سن را بیان میکند. وقتی برنامه پاسخی میخواهد که از آن حد قدیمیتر نباشد سودمند است، اما ممنوعیت ذخیرهسازی نیست. پاسخی که همین حالا تولید شده میتواند آن را برآورده کند.
افزودن یک پارامتر پرسوجوی تصادفی، یک نشانی هدف متفاوت میخواهد. این میتواند ورودی حافظه نهان دیگری بسازد یا حتی پاسخ برنامه را تغییر دهد. پارامتر پرسوجو را تنها زمانی به کار ببرید که بخشی از رابط موردنظر منبع باشد.
برای HTTPS CONNECT معمولی، پراکسی تونل نمیتواند این سرآیند را درون TLS ببیند. با این حال سیاست میتواند به مبدأ و حافظههای نهانی برسد که تبادل HTTP رمزگشاییشده را مدیریت میکنند. پیش از نسبتدادن پاسخ ذخیرهشده به تونل، بررسی کنید که آن پاسخ واقعاً کجا قرار دارد.