อะไรคือความแตกต่างระหว่าง if-modified-since และ if-none-match? ฉันรู้สึกว่าใช้ if-none-match สำหรับไฟล์ในขณะที่ if-modified-since ใช้สำหรับเพจ?
อะไรคือความแตกต่างระหว่าง if-modified-since และ if-none-match? ฉันรู้สึกว่าใช้ if-none-match สำหรับไฟล์ในขณะที่ if-modified-since ใช้สำหรับเพจ?
คำตอบ:
เกี่ยวกับความแตกต่างระหว่างLast-Modified/If-Modified-SinceและETag/If-None-Match:
ทั้งสองสามารถใช้แทนกันได้ อย่างไรก็ตามขึ้นอยู่กับประเภทของทรัพยากรและวิธีการสร้างทรัพยากรบนเซิร์ฟเวอร์คำถามหนึ่งข้อหรือคำถามอื่น ๆ ("สิ่งนี้ถูกแก้ไขตั้งแต่ ... ?" / "สิ่งนี้ยังตรงกับ ETag นี้หรือไม่") อาจจะตอบได้ง่ายกว่า .
ตัวอย่าง:
mtimeเป็นLast-Modifiedวันที่เป็นวิธีที่ง่ายที่สุดETagจะง่ายกว่ามาก ดูลิงค์เหล่านี้สำหรับรายละเอียดเพิ่มเติมในหัวข้อ:
If-Modified-Sinceเมื่อเทียบกับLast-Modifiedในขณะที่เมื่อเทียบกับIf-None-Match ETagทั้งสองอย่างModified-SinceและETagสามารถใช้เพื่อระบุตัวแปรเฉพาะของทรัพยากร
แต่การเปรียบเทียบIf-Modified-Sinceto จะLast-Modifiedให้ข้อมูลว่าตัวแปรที่แคชเก่ากว่าหรือใหม่กว่าในขณะที่การเปรียบเทียบIf-None-Matchเพื่อETagให้ข้อมูลว่าทั้งสองเหมือนกันหรือไม่หรือไม่ นอกจากนี้ETagเครื่องกำเนิดไฟฟ้าส่วนใหญ่ยังมีข้อมูลของไอโหนดเฉพาะของระบบดังนั้นการย้ายไฟล์ไปยังไดรฟ์อื่นอาจเปลี่ยนแปลงได้ETagเช่นกัน
ค่าการประทับเวลาที่ใช้ใน Last-Modified / If-Modified-Since มีความแม่นยำ จำกัด - หนึ่งวินาทีและนั่นไม่เพียงพอสำหรับเนื้อหาที่เปลี่ยนแปลงอย่างรวดเร็วเช่นแอปพลิเคชันเว็บแชทที่สามารถโพสต์ข้อความได้มากกว่าหนึ่งข้อความในทุกวินาทีที่กำหนด . ETag / If-None-Match สามารถช่วยแก้ปัญหานั้นได้
ตามที่ระบุไว้ในแนวทางปฏิบัติที่ดีที่สุดของ Google:
สิ่งสำคัญคือต้องระบุหนึ่งในอายุสูงสุดของการหมดอายุหรือการควบคุมแคชและหนึ่งใน Last-Modified หรือ ETag สำหรับทรัพยากรที่สามารถแคชได้ทั้งหมด การระบุทั้ง Expires และ Cache-Control: max-age นั้นซ้ำซ้อนหรือระบุทั้ง Last-Modified และ ETag
https://developers.google.com/speed/docs/best-practices/caching
Last-ModifiedกับETag(หรือในด้าน useragent If-Modified-Sinceด้วยIf-None-Match) ในทำนองเดียวกันข้อมูลจำเพาะ W3 ไม่ได้ จำกัด คุณ มันบอกว่าไม่ใช้If-Modified-SinceกับIf-Matchแต่ฉันคิดว่านั่นเป็นเพราะชุดเอกสารที่มีการอัปเดตวันที่ แต่เนื้อหาเดียวกับที่กำหนดโดย ETag ควรมีขนาดค่อนข้างเล็ก
If-Modified-ตั้งแต่ใช้วันในขณะที่หากไม่มี-Match-ใช้ETag สามารถใช้กับ "เพจ" (เช่น HTML) และไฟล์อื่น ๆ ได้
เว้นแต่จะระบุว่าเซิร์ฟเวอร์อ่อนแอ ETag ถือเป็นตัวตรวจสอบความถูกต้องที่แข็งแกร่งและสามารถใช้เพื่อตอบสนองคำขอที่อยู่ในช่วงตามเงื่อนไขได้ อย่างไรก็ตามอีแท็กที่สร้างขึ้นโดยอัตโนมัติส่วนใหญ่มีปัญหาในสถานการณ์เซิร์ฟเวอร์ฟาร์มเนื่องจากมักใช้ข้อมูลไอโหนดและ / หรือตัวนับถาวรที่ไม่ซ้ำกัน ในทางปฏิบัติฉันพบว่าส่วนหัว Last Modified เพียงพอสำหรับเนื้อหาที่ค่อนข้างคงที่เช่นการแสดงเนื้อหาคงที่ที่มีการป้องกันเนื่องจากเวลาในการเขียนไฟล์ทำให้ตัวตรวจสอบความถูกต้องดีพอสมควร
ETag มีความยืดหยุ่นมากที่สุด ลูกค้าที่เป็นไปตามข้อกำหนดจะต้องส่ง ETag ในคำขอแบบมีเงื่อนไขในขณะที่พวกเขาควรส่งทั้งสองอย่างหากมี
ส่วนหัว If-Modified-Since ใช้เพื่อระบุเวลาที่เบราว์เซอร์ได้รับทรัพยากรที่ร้องขอครั้งล่าสุด ส่วนหัว If-None-Match ใช้เพื่อระบุแท็กเอนทิตีที่เซิร์ฟเวอร์ออกพร้อมกับรีซอร์สที่ร้องขอเมื่อได้รับล่าสุด
ในสองวิธีที่อธิบายไว้ส่วนหัวเหล่านี้ใช้เพื่อสนับสนุนการแคชเนื้อหาภายในเบราว์เซอร์และเปิดใช้งานเซิร์ฟเวอร์เพื่อสั่งให้เบราว์เซอร์ใช้สำเนาของทรัพยากรที่แคชไว้แทนที่จะตอบสนองด้วยเนื้อหาทั้งหมดของทรัพยากรหากเป็น ไม่จำเป็น.