จะใช้เมื่อใดและไม่ใช้ ETags


9

ฉันแค่ดูที่เว็บไซต์ของเราบนWebPageTest.orgและหนึ่งในคำแนะนำของพวกเขาสำหรับการเร่งเว็บไซต์คือ:

โดยทั่วไปไม่ควรใช้ส่วนหัว ETag เว้นแต่คุณจะมีเหตุผลที่ชัดเจนในการต้องการ

ฉันสงสัยว่าสิ่งนี้หมายความว่าอย่างไร หมายความว่าเนื้อหาแบบคงที่คุณรู้ว่าจะไม่เปลี่ยนแปลงไม่ควรมีหรือหมายความว่าเนื้อหาที่คุณรู้ว่าจะมีการเปลี่ยนแปลงอย่างสม่ำเสมอไม่ควรมีหรือหมายความว่าคุณไม่ควรใช้งานโดยทั่วไปเว้นแต่คุณจะมี ความต้องการเฉพาะ

ถ้าเป็นหลังเวลาที่เหมาะสมในการใช้งานคือเมื่อใด ขอบคุณสำหรับความช่วยเหลือ

คำตอบ:


8

ETags เป็นทางเลือกในการ (แต่สามารถใช้ร่วมกับ) "Last-Modified-Time" เพื่อตรวจสอบความถูกต้องของแคช

ลูกค้าสามารถส่งเงื่อนไขล่วงหน้าเช่น if-match หรือ if-none-match ตาม ETag สิ่งนี้ไม่ได้มีไว้สำหรับคำขอ GET เท่านั้น (ซึ่งเป็นสิ่งที่ webpagetest.org ทำ) คุณสามารถใช้ "การปรับปรุงแบบฉวยโอกาส" เพื่อให้คำขอ PUT มีเงื่อนไขล่วงหน้าและจะไม่ทำการดำเนินการอัปเดตหากทรัพยากรได้รับการอัปเดตตั้งแต่ ETag เดิม ที่ได้มาครั้งสุดท้าย

กล่าวง่ายๆ: คุณกดแก้ไขบนหน้าใน CMS ของคุณเพื่อนของคุณจะแก้ไขบนหน้าใน CMS ของคุณเพื่อนของคุณทำการแก้ไขและกดบันทึกและในที่สุดคุณก็กดบันทึก - โดยไม่ต้องใช้ ETag หรือ Content-MD5 HTTP header ที่คุณต้องการ เพื่อสร้างวงล้อใหม่เพื่อป้องกันปัญหาที่จะเกิดขึ้น (เช่นคุณเช็ดเพื่อน ๆ ของคุณเปลี่ยนแปลง) การแก้ปัญหาเป็นส่วนหนึ่งของโพรโทคอล HTTP แล้วดังนั้นจึงเหมาะสมที่จะใช้งาน

โดยทั่วไปฉันเห็นด้วยกับ AOL (ที่เรียกใช้ webpagetest.org) ในคำแนะนำ "หนึ่งขนาดเหมาะกับทุกคน" ของพวกเขา - มันจะดีกว่าที่จะไม่อุดตันส่วนหัว HTTP ที่มีสตริงที่เข้ารหัสลับ (ETags โดยทั่วไปจะไม่สวยหรือมนุษย์อ่านได้) ซึ่ง Last-Modified-Time สามารถตรวจพบ) จะทำเพื่องานในมือ

หากหน้ากำลังได้รับการอัปเดตหลายครั้งต่อวินาทีและคุณต้องการรุ่นที่ถูกต้องที่สุดที่จะแสดงคุณอาจต้องการทดสอบกับโซลูชันอื่นที่ไม่ใช่ HTTP GETs หรือเพียงแค่ใช้ ETags

ระวังว่า ETags ของคุณจะไม่รวมต่อระบบไฟล์, ต่อการเปลี่ยนแปลงการกำหนดค่าเซิร์ฟเวอร์, ข้อมูลอื่น ๆ (เช่น inodes ซึ่งเป็นค่าเริ่มต้นบน Apache) มิฉะนั้นคุณจะมีปัญหาเมื่อมีเซิร์ฟเวอร์สองเครื่อง (ETags จากแต่ละเซิร์ฟเวอร์จะไม่ตรงกัน)


ไม่เป็นไร. มีตัวอย่างหนึ่งที่ฉันไม่แน่ใจว่า: หากคุณมีเนื้อหาหลายเวอร์ชันทั้งหมดใน URI เดียว (เช่นรุ่นมือถือหรือ Internet Explorer) ETags อาจถูกใช้เพื่อค้นหาทุกรุ่นเพื่อจับคู่ (จึงเรียกว่า if- none-match ไม่ใช่ if-not-match) - ขึ้นอยู่กับผู้ที่คุณถามว่ามีคำตอบที่แตกต่างกัน (เช่นไม่มี URI ถาวรสำหรับการรับรองหลาย ๆ แบบ ฯลฯ )
Metalshark

7

ในการถอดความการประเมินที่ยอดเยี่ยมของปลั๊กอิน YSlow Firebug (ซึ่งปรากฏว่า WebPageTest.org ใช้เป็นพื้นฐานสำหรับการประเมินผล)

"Yahoo เป็นหนึ่งในเว็บไซต์ที่คึกคักที่สุดในโลกปัญหาของมันอาจไม่ใช่ปัญหาของคุณ"

หากคุณไม่ได้ติดต่อกับคนพิเศษหลายล้านคนในเครือข่ายโหลดบาลานซ์ของคุณทุกวันมีโอกาสที่คำแนะนำที่ให้นั้นไม่ใช่ตัวเลือกที่ถูกต้องทั้งหมดเมื่อปรับไซต์ของคุณให้เหมาะสม


ฉันขอขอบคุณความคิดเห็น แต่คุณผิด Steve Sounders อธิบายที่นี่: stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed (เขาเป็นผู้สนับสนุนที่สำคัญในการปรับปรุงที่มีประโยชน์ - ไม่ใช่แค่การปรับปรุงที่จะใช้งานได้กับ Google) เว็บไซต์ของเราคือ ใหญ่พอที่จะรู้สึกได้ถึงความเร็วที่เพิ่มขึ้นจากการปรับปรุงดังกล่าว (และมีอยู่แล้ว)
Django Reinhardt

2
ตอนนี้ส่วนขยายของ yslow firebug นั้นรวมถึงการทดสอบไซต์ขนาดเล็กซึ่งมีความสมจริงมากขึ้นสำหรับไซต์ส่วนใหญ่
John Conde

1
@Django Reinhardt - ฉัน reworded ตอบของฉันมันเป็นความจริงที่หลาย ! คำแนะนำที่ถูกต้องสำหรับเว็บไซต์ใด ๆ แต่ ETags โดยเฉพาะอย่างยิ่งเป็นเพราะที่ถกเถียงกันใน Y 'กรณีความขัดแย้งกับคุณลักษณะดุลการโหลด
danlefree

ลิงก์ที่คุณระบุมีลิงก์ไปยังคำอธิบายของ ETags ของ Yahoo ( developer.yahoo.com/performance/rules.html#etags ) ซึ่งตอบคำถามของฉันได้ดี (ใช่มันน่าจะดีกว่าถ้าเราไม่ให้บริการ ETags) ขอบคุณ
Django Reinhardt

1
@Django: หากคุณมีเซิร์ฟเวอร์หลายตัว ETags อาจเป็นปัญหาได้ อย่างไรก็ตามตราบใดที่ไฟล์เดียวกันคืนค่า ETag เดิมให้มันก็จะสมบูรณ์แบบ ดูเพิ่มเติมที่: webmasters.stackexchange.com/questions/1459/…
DisgruntledGoat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.