ความหมาย
สำเนาแคชที่ไคลเอนต์มีอยู่ยังใช้ได้ เซิร์ฟเวอร์จึงไม่ส่ง body เป็นการตอบคำขอแบบมีเงื่อนไขด้วย If-None-Match หรือ If-Modified-Since
สาเหตุที่พบบ่อย
- ETag ใน If-None-Match ตรงกับเวอร์ชันปัจจุบัน
- resource ไม่เปลี่ยนตั้งแต่ If-Modified-Since
- เบราว์เซอร์ตรวจสอบ asset ที่แคชไว้อีกครั้ง
วิธีแก้ไข
สำหรับไคลเอนต์หรือผู้เยี่ยมชม
ใช้ body จากแคช หากเนื้อหาดูเก่า ตัวตรวจสอบอาจผิด ให้บังคับโหลดใหม่หรือตรวจการสร้าง ETag
สำหรับผู้ดูแลเว็บไซต์หรือ API
สร้าง ETag ที่คงที่ (เหมือนกันทุกเซิร์ฟเวอร์หลัง load balancer) และส่ง header แคชชุดเดียวกับที่ส่งกับ 200
ตัวอย่างการตอบกลับ
HTTP/1.1
HTTP/1.1 304 Not Modified
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "33a64df5"
Cache-Control: max-age=3600 ข้อกำหนด
คำถามที่พบบ่อย
› 304 เป็นข้อผิดพลาดหรือไม่
ไม่ใช่ ช่วยประหยัดแบนด์วิดท์โดยบอกไคลเอนต์ว่าแคชเป็นปัจจุบันแล้ว
› ทำไมผู้ใช้เห็นไฟล์เก่าหลัง deploy
header แคชอนุญาตให้ใช้สำเนาเก่า ใช้ชื่อไฟล์แบบมี fingerprint สำหรับ asset และ max-age สั้นพร้อมการตรวจสอบสำหรับ HTML