พวกเขาแตกต่างกันเล็กน้อย - ETag ไม่มีข้อมูลใด ๆ ที่ลูกค้าสามารถใช้เพื่อพิจารณาว่าจะทำการร้องขอไฟล์นั้นอีกครั้งหรือไม่ในอนาคต หาก ETag เป็นทั้งหมดที่มีอยู่จะต้องทำการร้องขอเสมอ อย่างไรก็ตามเมื่อเซิร์ฟเวอร์อ่าน ETag จากการร้องขอของไคลเอนต์เซิร์ฟเวอร์สามารถกำหนดได้ว่าจะส่งไฟล์ (HTTP 200) หรือบอกให้ไคลเอนต์เพียงแค่ใช้สำเนาโลคัล (HTTP 304) ETag นั้นเป็นเพียงการตรวจสอบสำหรับไฟล์ที่เปลี่ยนความหมายเมื่อเนื้อหาของไฟล์เปลี่ยนไป
ส่วนหัว Expires ถูกใช้โดยไคลเอนต์ (และพร็อกซี / แคช) เพื่อพิจารณาว่าจำเป็นต้องทำการร้องขอไปยังเซิร์ฟเวอร์หรือไม่ ยิ่งคุณอยู่ใกล้กับวันหมดอายุยิ่งมีโอกาสมากที่ลูกค้า (หรือพร็อกซี) จะทำการร้องขอ HTTP สำหรับไฟล์นั้นจากเซิร์ฟเวอร์
ดังนั้นสิ่งที่คุณต้องการทำจริงๆคือใช้ส่วนหัวทั้งสอง - ตั้งค่าส่วนหัว Expires ให้เป็นค่าที่เหมาะสมตามความถี่ที่เนื้อหาเปลี่ยนแปลง จากนั้นกำหนดค่า ETags ที่จะส่งเพื่อให้เมื่อไคลเอนต์ส่งคำขอไปยังเซิร์ฟเวอร์จะสามารถกำหนดได้ง่ายขึ้นว่าจะส่งไฟล์กลับหรือไม่
หมายเหตุสุดท้ายหนึ่งเกี่ยวกับ ETag - หากคุณใช้การตั้งค่าเซิร์ฟเวอร์ที่สมดุลกับเครื่องหลายเครื่องที่ใช้ Apache คุณอาจต้องการปิดการสร้าง ETag เนื่องจาก inodes ถูกใช้เป็นส่วนหนึ่งของอัลกอริทึมแฮช ETag ซึ่งจะแตกต่างกันระหว่างเซิร์ฟเวอร์ คุณสามารถกำหนดค่า Apache ให้ไม่ใช้ inodes เป็นส่วนหนึ่งของการคำนวณได้ แต่คุณต้องการตรวจสอบให้แน่ใจว่า timestamps ของไฟล์เหมือนกันทุกประการเพื่อให้แน่ใจว่า ETag ตัวเดียวกันจะถูกสร้างขึ้นสำหรับเซิร์ฟเวอร์ทั้งหมด