DevToolPal
ไทย
3xx เปลี่ยนเส้นทาง

304 Not Modified

ไม่มีการเปลี่ยนแปลง

ความหมาย

สำเนาแคชที่ไคลเอนต์มีอยู่ยังใช้ได้ เซิร์ฟเวอร์จึงไม่ส่ง 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

ข้อกำหนด

RFC 9110 §15.4.5

คำถามที่พบบ่อย

› 304 เป็นข้อผิดพลาดหรือไม่

ไม่ใช่ ช่วยประหยัดแบนด์วิดท์โดยบอกไคลเอนต์ว่าแคชเป็นปัจจุบันแล้ว

› ทำไมผู้ใช้เห็นไฟล์เก่าหลัง deploy

header แคชอนุญาตให้ใช้สำเนาเก่า ใช้ชื่อไฟล์แบบมี fingerprint สำหรับ asset และ max-age สั้นพร้อมการตรวจสอบสำหรับ HTML