Xác thực lại một bản tải xuống qua proxy với Cache-Control: no-cache
Yêu cầu một phản hồi đã được xác thực mà không đổi URL tải xuống và không nhầm lẫn việc xác thực lại với lệnh cấm lưu trữ.
URL tải xuống là đúng, nhưng một proxy dùng chung vẫn còn phản hồi đã lưu. Nếu thao tác cần một phản hồi được xác thực với nguồn gốc, hãy đặt yêu cầu đó lên yêu cầu:
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)
Đoạn này giả định ứng dụng sở hữu một luồng đầu ra nhị phân và cung cấp một download_url HTTPS. Để thử một bản tải xuống công khai được phép mà không có xác thực proxy, hãy dùng một ứng viên điểm cuối HTTP từ danh sách proxy HTTP trong opener; yêu cầu về bộ nhớ đệm của yêu cầu vẫn giữ nguyên. Nó giữ URL gốc của tài nguyên đồng thời yêu cầu các bộ nhớ đệm trên đường đi của yêu cầu xác thực trước khi dùng lại.
Việc xác thực có thể dùng lại các byte đã lưu
Một bộ nhớ đệm tuân thủ nhận no-cache không thể đáp ứng yêu cầu này từ một phản hồi đã lưu mà không xác thực thành công với nguồn gốc. Nguồn gốc có thể xác nhận rằng biểu diễn đã lưu vẫn còn hiệu lực, nên thao tác không cần gửi lại một tệp không đổi từ nguồn gốc.
max-age=0 trong một yêu cầu thể hiện giới hạn tuổi. Nó hữu ích khi ứng dụng muốn một phản hồi không cũ hơn giới hạn đó, nhưng đó không phải là lệnh cấm lưu trữ. Một phản hồi vừa được tạo có thể đáp ứng điều đó.
Thêm một tham số truy vấn ngẫu nhiên yêu cầu một URI đích khác. Điều đó có thể tạo thêm một mục bộ nhớ đệm hoặc thậm chí thay đổi phản hồi của ứng dụng. Chỉ dùng tham số truy vấn khi nó là một phần trong giao diện dự kiến của tài nguyên.
Với HTTPS CONNECT thông thường, proxy đường hầm không thể thấy tiêu đề này bên trong TLS. Chính sách vẫn có thể đến được nguồn gốc và các bộ nhớ đệm xử lý trao đổi HTTP đã được giải mã. Hãy kiểm tra phản hồi đã lưu thực sự nằm ở đâu trước khi quy nó cho đường hầm.