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 ที่ถอดรหัสแล้ว ตรวจสอบว่าการตอบกลับที่จัดเก็บไว้อยู่ที่ใดจริง ๆ ก่อนจะโยงไปที่อุโมงค์

บทความที่เกี่ยวข้อง