พื้นหลัง
ฉันกำลังเขียนและใช้เครื่องมือการจัดการเนื้อหาที่ใช้ CGI (Perl) ที่เรียบง่ายสำหรับเว็บไซต์สองเว็บไซต์ ให้ผู้ดูแลระบบเว็บไซต์มีรูปแบบ HTML สำหรับเหตุการณ์ที่พวกเขากรอกข้อมูลในฟิลด์ (วันที่สถานที่ชื่อเรื่องคำอธิบายลิงก์ ฯลฯ ) และบันทึกไว้ ในแบบฟอร์มนั้นฉันอนุญาตให้ผู้ดูแลระบบอัปโหลดรูปภาพที่เกี่ยวข้องกับเหตุการณ์ ในหน้า HTML ที่แสดงแบบฟอร์มฉันกำลังแสดงตัวอย่างของรูปภาพที่อัปโหลด (แท็ก HTML img)
ปัญหา
ปัญหาเกิดขึ้นเมื่อผู้ดูแลระบบต้องการเปลี่ยนรูปภาพ เขาจะต้องกดปุ่ม "เรียกดู" เลือกภาพใหม่แล้วกดตกลง และใช้งานได้ดี
เมื่ออัปโหลดภาพแล้ว CGI ส่วนหลังของฉันจะจัดการการอัปโหลดและโหลดแบบฟอร์มซ้ำอย่างเหมาะสม
ปัญหาคือรูปภาพที่แสดงไม่ได้รับการรีเฟรช ภาพเก่ายังคงแสดงแม้ว่าฐานข้อมูลจะเก็บภาพที่ถูกต้อง ฉันได้ จำกัด ขอบเขตให้แคบลงตามข้อเท็จจริงที่ว่ารูปภาพถูกแคชในเว็บเบราว์เซอร์ หากผู้ดูแลระบบกดปุ่ม RELOAD ใน Firefox / Explorer / Safari ทุกอย่างจะได้รับการรีเฟรชตามปกติและรูปภาพใหม่จะปรากฏขึ้น
โซลูชันของฉัน - ไม่ทำงาน
ฉันพยายามควบคุมแคชโดยเขียนคำสั่ง HTTP Expires พร้อมวันที่ที่ผ่านมา
Expires: Mon, 15 Sep 2003 1:00:00 GMT
โปรดจำไว้ว่าฉันอยู่ในด้านการดูแลระบบและฉันไม่สนใจจริงๆว่าหน้าจะใช้เวลาโหลดนานกว่านี้เล็กน้อยหรือไม่เพราะหน้าเหล่านี้จะหมดอายุเสมอ
แต่ก็ไม่ได้ผลเช่นกัน
หมายเหตุ
เมื่ออัปโหลดภาพชื่อไฟล์จะไม่ถูกเก็บไว้ในฐานข้อมูล เปลี่ยนชื่อเป็นImage.jpg (เป็นเพียงสิ่งเดียวเมื่อใช้มัน) เมื่อแทนที่ภาพที่มีอยู่ด้วยภาพใหม่ชื่อจะไม่เปลี่ยนเช่นกัน เพียงแค่เนื้อหาของไฟล์ภาพเปลี่ยนไป
เว็บเซิร์ฟเวอร์ให้บริการโดยบริการโฮสต์ / ISP ใช้ Apache
คำถาม
มีวิธีบังคับให้เว็บเบราว์เซอร์ไม่แคชสิ่งต่างๆจากหน้านี้หรือไม่แม้แต่รูปภาพ
ฉันกำลังเล่นกลกับตัวเลือกในการ "บันทึกชื่อไฟล์" ด้วยฐานข้อมูล ด้วยวิธีนี้หากรูปภาพมีการเปลี่ยนแปลง src ของแท็ก IMG ก็จะเปลี่ยนไปด้วย อย่างไรก็ตามสิ่งนี้ต้องมีการเปลี่ยนแปลงมากมายทั่วทั้งไซต์และฉันไม่ควรทำเช่นนั้นหากมีวิธีแก้ไขที่ดีกว่า นอกจากนี้การดำเนินการนี้จะยังคงใช้ไม่ได้หากรูปภาพใหม่ที่อัปโหลดมีชื่อเดียวกัน (บอกว่ารูปภาพถูกตัดทอนเล็กน้อยและอัปโหลดใหม่)