ตรวจสอบการดาวน์โหลดผ่านพร็อกซีอีกครั้งด้วย Cache-Control: no-cache
ขอการตอบกลับที่ตรวจสอบแล้วโดยไม่เปลี่ยน URL ดาวน์โหลด และอย่าสับสนระหว่างการตรวจสอบซ้ำกับการห้ามจัดเก็บ
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 เพื่อลองดาวน์โหลดสาธารณะที่ได้รับอนุญาตโดยไม่มีการพิสูจน์ตัวตนพร็อกซี ให้ใช้ผู้สมัครปลายทาง HTTP จากรายการพร็อกซี HTTPใน opener ข้อกำหนดแคชของคำขอยังคงเดิม มันรักษา URL ของทรัพยากรเดิมไว้พร้อมกับขอให้แคชบนเส้นทางคำขอตรวจสอบก่อนนำกลับมาใช้
การตรวจสอบสามารถใช้ไบต์ที่จัดเก็บไว้ซ้ำได้
แคชที่สอดคล้องและได้รับ no-cache ไม่สามารถตอบสนองคำขอนี้จากการตอบกลับที่จัดเก็บไว้ได้โดยไม่มีการตรวจสอบกับต้นทางที่สำเร็จ ต้นทางสามารถยืนยันได้ว่าตัวแทนที่จัดเก็บไว้ยังใช้ได้ ดังนั้นการดำเนินการจึงไม่จำเป็นต้องส่งไฟล์ที่ไม่เปลี่ยนแปลงจากต้นทางอีกครั้ง
max-age=0 ในคำขอแสดงถึงขีดจำกัดอายุ มีประโยชน์เมื่อแอปพลิเคชันต้องการการตอบกลับที่ไม่เก่ากว่าขีดจำกัดนั้น แต่ไม่ใช่การห้ามจัดเก็บ การตอบกลับที่เพิ่งสร้างขึ้นสามารถตอบสนองได้
การเพิ่มพารามิเตอร์คำขอแบบสุ่มเรียกร้อง URI เป้าหมายที่ต่างออกไป สิ่งนี้อาจสร้างรายการแคชอีกรายการหรือแม้แต่เปลี่ยนการตอบกลับของแอปพลิเคชัน ใช้พารามิเตอร์คำขอเฉพาะเมื่อเป็นส่วนหนึ่งของอินเทอร์เฟซที่ตั้งใจของทรัพยากร
สำหรับ HTTPS CONNECT ทั่วไป พร็อกซีอุโมงค์ไม่สามารถเห็นส่วนหัวนี้ภายใน TLS นโยบายยังสามารถไปถึงต้นทางและแคชที่จัดการการแลกเปลี่ยน HTTP ที่ถอดรหัสแล้ว ตรวจสอบว่าการตอบกลับที่จัดเก็บไว้อยู่ที่ใดจริง ๆ ก่อนจะโยงไปที่อุโมงค์