อะไรคือความแตกต่างระหว่าง 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-Since
to จะ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 ใช้เพื่อระบุแท็กเอนทิตีที่เซิร์ฟเวอร์ออกพร้อมกับรีซอร์สที่ร้องขอเมื่อได้รับล่าสุด
ในสองวิธีที่อธิบายไว้ส่วนหัวเหล่านี้ใช้เพื่อสนับสนุนการแคชเนื้อหาภายในเบราว์เซอร์และเปิดใช้งานเซิร์ฟเวอร์เพื่อสั่งให้เบราว์เซอร์ใช้สำเนาของทรัพยากรที่แคชไว้แทนที่จะตอบสนองด้วยเนื้อหาทั้งหมดของทรัพยากรหากเป็น ไม่จำเป็น.