Een download via een proxy opnieuw valideren met Cache-Control: no-cache
Vraag een gevalideerd antwoord zonder de download-URL te wijzigen en zonder hervalidatie te verwarren met een opslagverbod.
De download-URL is correct, maar een gedeelde proxy heeft nog steeds een opgeslagen antwoord. Als de bewerking een antwoord nodig heeft dat bij de oorsprong is gevalideerd, zet die eis dan op het verzoek:
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)
Dit fragment gaat ervan uit dat de applicatie een binaire uitvoerstroom bezit en een HTTPS download_url levert. Om een toegestane openbare download zonder proxy-authenticatie te proberen, gebruikt u een HTTP-eindpuntkandidaat uit de HTTP-proxylijst in de opener; de cache-eis van het verzoek blijft gelijk. Het behoudt de oorspronkelijke URL van de resource en vraagt caches op het verzoekpad om te valideren vóór hergebruik.
Validatie kan de opgeslagen bytes hergebruiken
Een conforme cache die no-cache ontvangt, kan dit verzoek niet uit een opgeslagen antwoord vervullen zonder succesvolle validatie bij de oorsprong. De oorsprong kan bevestigen dat de opgeslagen representatie nog geldig is, dus de bewerking hoeft een ongewijzigd bestand niet opnieuw van de oorsprong te verzenden.
De max-age=0 van een verzoek drukt een leeftijdsgrens uit. Het is nuttig wanneer de applicatie een antwoord wil dat niet ouder is dan die grens, maar het is geen verbod op opslag. Een antwoord dat zojuist is gegenereerd, kan eraan voldoen.
Een willekeurige queryparameter toevoegen vraagt een andere doel-URI. Dat kan een andere cache-entry opleveren of zelfs het antwoord van de applicatie veranderen. Gebruik een queryparameter alleen wanneer die deel uitmaakt van de beoogde interface van de resource.
Voor gewone HTTPS CONNECT kan de tunnelproxy deze header niet binnen TLS zien. Het beleid kan de oorsprong en de caches die de ontsleutelde HTTP-uitwisseling afhandelen, nog steeds bereiken. Controleer waar het opgeslagen antwoord werkelijk staat voordat u het aan de tunnel toeschrijft.