URL завантаження правильний, але спільний проксі все ще має збережену відповідь. Якщо операції потрібна відповідь, перевірена з джерелом, помістіть цю вимогу в запит:

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)

Цей фрагмент припускає, що застосунок володіє двійковим потоком виведення і надає HTTPS download_url. Щоб випробувати дозволене публічне завантаження без автентифікації проксі, використайте в opener кандидата кінцевої точки HTTP зі списку проксі HTTP; вимога до кешу в запиті залишається тією ж. Він зберігає початковий URL ресурсу і водночас просить кеші на шляху запиту виконати перевірку перед повторним використанням.

Перевірка може повторно використати збережені байти

Відповідний кеш, отримавши no-cache, не може задовольнити цей запит зі збереженої відповіді без успішної перевірки з джерелом. Джерело може підтвердити, що збережене подання досі чинне, тому операції не потрібно повторно передавати незмінений файл із джерела.

max-age=0 у запиті виражає обмеження за віком. Воно корисне, коли застосунку потрібна відповідь не старша за це обмеження, але це не заборона зберігання. Щойно створена відповідь може йому відповідати.

Додавання випадкового параметра запиту вимагає іншого цільового URI. Це може створити ще один запис у кеші або навіть змінити відповідь застосунку. Використовуйте параметр запиту лише тоді, коли він є частиною задуманого інтерфейсу ресурсу.

Для звичайного HTTPS CONNECT тунелювальний проксі не бачить цього заголовка всередині TLS. Політика все ж може дістатися джерела та кешів, що обробляють розшифрований обмін HTTP. Перевірте, де насправді живе збережена відповідь, перш ніж приписувати її тунелю.

Схожі статті