Revalidar um download através de um proxy com Cache-Control: no-cache
Peça uma resposta validada sem alterar o URL de download nem confundir a revalidação com uma proibição de armazenamento.
O URL de download está correto, mas um proxy partilhado ainda tem uma resposta armazenada. Se a operação precisa de uma resposta validada com a origem, coloque esse requisito no pedido:
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)
Este fragmento pressupõe que a aplicação possui um fluxo de saída binário e fornece um download_url HTTPS. Para experimentar um download público permitido sem autenticação de proxy, use um candidato de ponto final HTTP da lista de proxies HTTP no opener; o requisito de cache do pedido mantém-se igual. Mantém o URL original do recurso enquanto pede às caches no caminho do pedido que validem antes da reutilização.
A validação pode reutilizar os bytes armazenados
Uma cache em conformidade que receba no-cache não pode satisfazer este pedido a partir de uma resposta armazenada sem validação bem-sucedida com a origem. A origem pode confirmar que a representação armazenada continua válida, pelo que a operação não precisa de retransmitir um ficheiro inalterado a partir da origem.
O max-age=0 de um pedido exprime um limite de idade. É útil quando a aplicação quer uma resposta que não seja mais antiga do que esse limite, mas não é uma proibição de armazenamento. Uma resposta acabada de gerar pode cumpri-lo.
Acrescentar um parâmetro de consulta aleatório pede um URI de destino diferente. Isso pode produzir outra entrada de cache ou até alterar a resposta da aplicação. Use um parâmetro de consulta apenas quando fizer parte da interface prevista do recurso.
Para um HTTPS CONNECT comum, o proxy de túnel não consegue ver este cabeçalho dentro do TLS. A política ainda pode chegar à origem e às caches que tratam da troca HTTP decifrada. Verifique onde a resposta armazenada vive realmente antes de a atribuir ao túnel.