Revalider en nedlasting via en proxy med Cache-Control: no-cache
Be om et validert svar uten å endre nedlastings-URL-en og uten å forveksle revalidering med et forbud mot lagring.
Nedlastings-URL-en er riktig, men en delt proxy har fortsatt et lagret svar. Hvis operasjonen trenger et svar som er validert mot opprinnelsen, legg det kravet på forespørselen:
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)
Dette utdraget forutsetter at applikasjonen eier en binær utstrøm og leverer en HTTPS download_url. For å prøve en tillatt offentlig nedlasting uten proxy-autentisering, bruk en HTTP-endepunktkandidat fra HTTP-proxylisten i openeren; forespørselens cache-krav forblir det samme. Det beholder ressursens opprinnelige URL mens det ber cacher på forespørselsstien om å validere før gjenbruk.
Validering kan gjenbruke de lagrede bytene
En samsvarende cache som mottar no-cache kan ikke oppfylle denne forespørselen fra et lagret svar uten vellykket validering mot opprinnelsen. Opprinnelsen kan bekrefte at den lagrede representasjonen fortsatt er gyldig, så operasjonen trenger ikke sende en uendret fil på nytt fra opprinnelsen.
En forespørsels max-age=0 uttrykker en aldersgrense. Det er nyttig når applikasjonen vil ha et svar som ikke er eldre enn den grensen, men det er ikke et forbud mot lagring. Et svar som nettopp er generert, kan oppfylle det.
Å legge til en tilfeldig spørreparameter ber om en annen mål-URI. Det kan gi en ny cache-oppføring eller til og med endre applikasjonens svar. Bruk en spørreparameter bare når den er en del av ressursens tiltenkte grensesnitt.
For vanlig HTTPS CONNECT kan tunnelproxien ikke se denne headeren inne i TLS. Policyen kan likevel nå opprinnelsen og cachene som håndterer den dekrypterte HTTP-utvekslingen. Sjekk hvor det lagrede svaret faktisk ligger før du tilskriver det tunnelen.