ข้อมูลแคชคืออะไร Clear Cache หมายถึงอะไรและทำอะไร

ก่อนอื่นแคชคืออะไร?

โดยทั่วไปแคช (อ่านว่า "เงินสด") เป็นที่เก็บประเภทหนึ่ง คุณสามารถคิดว่าที่เก็บเป็นที่เก็บข้อมูล ในทางทหารสิ่งนี้จะถืออาวุธอาหารและเสบียงอื่น ๆ ที่จำเป็นในการปฏิบัติภารกิจต่อไป

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

ความแตกต่างระหว่างแคชและที่เก็บประเภทอื่น ๆ

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

บทความนี้จะกล่าวถึงวิธีการแคชที่แพร่หลายสองวิธี ได้แก่ การแคชเบราว์เซอร์และเครือข่ายการจัดส่งเนื้อหา (CDN)

นอกจากแคชแล้วที่เก็บอื่น ๆ ยังเข้ามามีบทบาทในสถาปัตยกรรมเว็บ บ่อยครั้งสิ่งเหล่านี้ได้รับการออกแบบมาเพื่อเก็บข้อมูลจำนวนมหาศาล พวกเขาไม่ได้มุ่งเน้นไปที่ประสิทธิภาพการดึงข้อมูล

ตัวอย่างเช่น Amazon Glacier เป็นที่เก็บข้อมูลที่ออกแบบมาเพื่อจัดเก็บข้อมูลในราคาถูก แต่ไม่สามารถเรียกคืนได้อย่างรวดเร็ว ในทางกลับกันฐานข้อมูล SQL ได้รับการออกแบบให้มีความยืดหยุ่นทันสมัยและรวดเร็ว แต่ไม่ค่อยมีราคาถูกและมักจะไม่เร็วเท่าแคช

Browser Cache: แคชหน่วยความจำ

แคชหน่วยความจำจะเก็บทรัพยากรไว้ในคอมพิวเตอร์ที่เบราว์เซอร์กำลังทำงานอยู่ ในขณะที่เบราว์เซอร์ทำงานอยู่ทรัพยากรที่ดึงมาจะถูกเก็บไว้ในหน่วยความจำกายภาพ (RAM) ของคอมพิวเตอร์และอาจอยู่ในฮาร์ดไดรฟ์ด้วย

ในภายหลังเมื่อต้องการทรัพยากรเดียวกันทั้งหมดเมื่อกลับไปที่หน้าเว็บเบราว์เซอร์จะดึงข้อมูลเหล่านั้นออกจากแคชแทนเซิร์ฟเวอร์ระยะไกล เนื่องจากแคชถูกจัดเก็บไว้ในหน่วยความจำที่รวดเร็วทรัพยากรเหล่านั้นจึงถูกดึงข้อมูลได้เร็วขึ้นและโหลดหน้าเว็บได้เร็วขึ้น

ความเร็วในการดึงทรัพยากรเป็นสิ่งสำคัญ แต่ก็มีความจำเป็นที่ทรัพยากรจะต้องมีความสดใหม่ ทรัพยากรเก่าคือทรัพยากรที่ล้าสมัยและอาจใช้ไม่ได้อีกต่อไป

หน้าที่ส่วนหนึ่งของเบราว์เซอร์คือการระบุว่าทรัพยากรที่แคชไว้ใดเก่าและดึงข้อมูลที่มีอยู่ เนื่องจากโดยทั่วไปหน้าเว็บอาจมีทรัพยากรจึงมักจะมีการผสมผสานระหว่างเวอร์ชันเก่าและเวอร์ชันใหม่ในแคช

เบราว์เซอร์จะรู้ได้อย่างไรว่ามีอะไรค้างอยู่ในแคช?

คำตอบนั้นไม่ง่าย แต่มีสองแนวทางหลัก ได้แก่ การป้องกันแคชและฟิลด์ส่วนหัว HTTP

การป้องกันแคช

ชาวอิตาลี

การป้องกันแคชเป็นเทคนิคทางฝั่งเซิร์ฟเวอร์ที่ช่วยให้มั่นใจได้ว่าเบราว์เซอร์จะดึงเฉพาะทรัพยากรใหม่ ๆ มันทำโดยทางอ้อม

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

สมมติว่าฉันมีหน้าเว็บที่www.foobar.com/about.htmlบอกทุกอย่างเกี่ยวกับ foobar.com ที่คุณอยากรู้ เมื่อคุณเข้าชมหน้านั้นและทรัพยากรที่เกี่ยวข้องจะถูกแคชไว้โดยเบราว์เซอร์

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

คุณผู้ดูแลเว็บ Quxbaz ทำอะไรเพื่อให้แน่ใจว่าเนื้อหาใหม่ทั้งหมดจะถูกผลักออก

เนื่องจากเบราว์เซอร์อาศัย URI เพื่อค้นหารายการในแคชหาก URI ของทรัพยากรเปลี่ยนแปลงไปก็เหมือนกับว่าเบราว์เซอร์ไม่เคยเห็นมาก่อนที่จะดึงทรัพยากรนั้นจากเซิร์ฟเวอร์

ดังนั้นโดยการเปลี่ยน URI ทรัพยากรจากwww.foobar.com/about.htmlเป็นwww.foobar.com/about2.html(หรือเป็นwww.quxbaz.com/about.html) เบราว์เซอร์จะไม่พบทรัพยากรแคชใด ๆ ที่เกี่ยวข้องกับ URI นั้นและทำการดึงข้อมูลทั้งหมดจากเซิร์ฟเวอร์ ทรัพยากรอาจเหมือนกับต้นฉบับภายใต้ URI เก่า แต่เบราว์เซอร์ไม่ทราบ

คุณไม่จำเป็นต้องเปลี่ยนชื่อเพจ ตั้งแต่ URI ยังรวมถึงสตริงแบบสอบถามโดยความหมายที่คุณสามารถเพิ่มรุ่นพารามิเตอร์ไป www.foobar.com/about.html?v=2hef9eb1URI:

ในกรณีนี้พารามิเตอร์เวอร์ชันvถูกตั้งค่าแฮชใหม่ที่สร้างขึ้นใหม่เมื่อใดก็ตามที่เนื้อหาเปลี่ยนแปลงหรือถูกทริกเกอร์โดยกระบวนการอื่นเช่นการรีสตาร์ทเซิร์ฟเวอร์ เบราว์เซอร์เห็นว่าสตริงการสืบค้นมีการเปลี่ยนแปลงและเนื่องจากสตริงการสืบค้นอาจส่งผลต่อสิ่งที่จะถูกส่งกลับเบราว์เซอร์จะดึงทรัพยากรที่อัปเดตจากเซิร์ฟเวอร์

เทคนิคทั้งสองนี้จะไม่ได้ผลหากเข้าถึง URI เก่าโดยตรงจากบุ๊กมาร์ก เว้นแต่ว่าเบราว์เซอร์จะได้รับคำสั่งให้ตรวจสอบความถูกต้อง URI อีกครั้งในคำขอแคชล่าสุด (หรือทรัพยากรที่แคชหมดอายุ) จะไม่ทำการดึงข้อมูลทั้งหมดเพื่อรีเฟรชแคช สิ่งนี้นำเราไปสู่หัวข้อถัดไป

ฟิลด์ส่วนหัว HTTP

คำขอทรัพยากรทุกรายการมาพร้อมกับข้อมูลเมตาที่เรียกว่าส่วนหัว ในทางกลับกันทุกคำตอบยังมีข้อมูลส่วนหัวที่เกี่ยวข้องด้วย

ในบางกรณีเบราว์เซอร์จะเห็นค่าส่วนหัวของการตอบกลับและเปลี่ยนค่าที่เกี่ยวข้องในส่วนหัวของคำขอที่ตามมา ในบรรดาค่าส่วนหัวเหล่านี้คือค่าที่มีผลต่อวิธีการแคชทรัพยากรบนเบราว์เซอร์

คำขอ HEAD และคำขอแบบมีเงื่อนไข

คำขอ HEAD เปรียบเสมือน GET ที่ถูกตัดทอนหรือคำขอ POST แทนที่จะร้องขอทรัพยากรที่สมบูรณ์คำขอ HEAD จะร้องขอเฉพาะฟิลด์ส่วนหัวที่จะส่งคืนตามคำขอแบบเต็มเท่านั้น

โดยทั่วไปส่วนหัวของทรัพยากรจะมีขนาดเล็กกว่ามาก (ในจำนวนไบต์ทั้งหมด) มากกว่าข้อมูลทรัพยากรที่เกี่ยวข้อง ("เนื้อหา" ของการตอบสนอง) ข้อมูลส่วนหัวเป็นข้อมูลที่เพียงพอเพื่อให้เบราว์เซอร์กำหนดความใหม่ของทรัพยากรในแคช

คำขอ HEAD มักใช้เพื่อตรวจสอบความถูกต้องของทรัพยากรเซิร์ฟเวอร์ (นั่นคือทรัพยากรยังคงมีอยู่หรือไม่และหากเป็นเช่นนั้นจะมีการอัปเดตตั้งแต่เบราว์เซอร์เข้าถึงครั้งล่าสุดหรือไม่) เบราว์เซอร์จะใช้สิ่งที่อยู่ในแคชหากคำขอ HEAD ระบุว่าทรัพยากรนั้นถูกต้องมิฉะนั้นจะดำเนินการตามคำขอ GET หรือ POST ทั้งหมดและรีเฟรชแคชด้วยสิ่งที่ส่งคืน

ด้วยการร้องขอแบบมีเงื่อนไขเบราว์เซอร์จะส่งฟิลด์ในส่วนหัวที่อธิบายถึงความใหม่ของทรัพยากรที่แคชไว้ คราวนี้เซิร์ฟเวอร์จะพิจารณาว่าแคชของเบราว์เซอร์ยังใหม่อยู่หรือไม่

หากเป็นเช่นนั้นเซิร์ฟเวอร์จะส่งคืนการตอบกลับ 304 โดยมีเพียงข้อมูลส่วนหัวของทรัพยากรและไม่มีเนื้อหาของทรัพยากร (ข้อมูล) หากแคชของเบราว์เซอร์ถูกพิจารณาว่าล้าสมัยเซิร์ฟเวอร์จะส่งคืนการตอบสนอง 200 OK เต็มรูปแบบ

กลไกนี้เร็วกว่าการใช้คำขอ HEAD เนื่องจากจะช่วยลดความเป็นไปได้ที่จะต้องออกคำขอสองรายการแทนที่จะเป็นคำขอเดียว

ข้างต้นช่วยลดความยุ่งยากในกระบวนการที่ค่อนข้างซับซ้อน มีการปรับแต่งอย่างละเอียดมากมายที่เกี่ยวข้องกับการแคช แต่ทุกอย่างถูกควบคุมผ่านฟิลด์ส่วนหัวซึ่งสิ่งที่สำคัญที่สุดคือการควบคุมแคช

การควบคุมแคช

เมื่อตอบสนองต่อคำขอเซิร์ฟเวอร์จะส่งฟิลด์ส่วนหัวไปยังเบราว์เซอร์เพื่อระบุพฤติกรรมที่ควรปรับเปลี่ยนเมื่อแคช หากฉันโหลดเพจที่//en.wikipedia.org/wiki/Uniform_Resource_Identifierคำตอบจะมีสิ่งนี้อยู่ในบันทึกส่วนหัว:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

ส่วนตัวหมายความว่าเฉพาะเบราว์เซอร์เท่านั้นที่ควรแคชเนื้อหาเอกสาร

S-maxageและmaxageมีการกำหนดให้0 ค่าs-maxageมีไว้สำหรับพร็อกซีเซิร์ฟเวอร์ที่มีแคชในขณะที่อายุสูงสุดมีไว้สำหรับเบราว์เซอร์ ผลของการตั้งค่าmax-age เพียงอย่างเดียวคือทรัพยากรที่แคชไว้จะหมดอายุทันที แต่อาจยังคงใช้งานได้ (แม้ว่าจะเก่า) ในระหว่างการโหลดหน้าซ้ำในขณะที่อยู่ในเซสชันเบราว์เซอร์เดียวกัน

ทรัพยากรเก่าอาจได้รับการตรวจสอบความถูกต้องอีกครั้งผ่านคำขอ HEAD ซึ่งอาจตามมาด้วยคำขอ GET หรือ POST ขึ้นอยู่กับการตอบกลับ ต้องตรวจสอบใหม่สั่งคำสั่งเบราว์เซอร์ revalidate ทรัพยากรที่เก็บไว้ถ้ามันจะค้าง

เนื่องจากอายุสูงสุดถูกตั้งค่าเป็น0ในกรณีนี้ทรัพยากรที่แคชไว้จะเก่าทันทีเมื่อได้รับ การรวมกันของทั้งสองคำสั่งเทียบเท่ากับคำสั่งเดียวไม่มีแคช

การตั้งค่าสองอย่างช่วยให้มั่นใจได้ว่าเบราว์เซอร์จะตรวจสอบทรัพยากรที่แคชซ้ำเสมอไม่ว่าจะยังอยู่ในเซสชันเดียวกันหรือไม่ก็ตาม

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

E-tag

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

E-tags คือค่าแฮชที่เซิร์ฟเวอร์สร้างขึ้นซึ่งมักใช้ชื่อไฟล์ฟิสิคัลของทรัพยากรและวันที่แก้ไขล่าสุดบนเซิร์ฟเวอร์เป็นเมล็ดพันธุ์ เมื่อไฟล์รีซอร์สถูกอัพเดตวันที่แก้ไขจะเปลี่ยนไปและค่าแฮชใหม่จะถูกสร้างขึ้นและส่งในส่วนหัวการตอบกลับไปยังคำร้องขอ

แท็กส่วนหัวอื่น ๆ ที่มีผลต่อการแคช

แท็กส่วนหัวจะหมดอายุและมีการแก้ไขครั้งล่าสุดทั้งหมดยกเว้นที่ล้าสมัย แต่เซิร์ฟเวอร์ส่วนใหญ่ยังคงส่งมาเพื่อให้เข้ากันได้กับเบราว์เซอร์รุ่นเก่า ตัวอย่าง:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

ที่นี่วันหมดอายุจะถูกกำหนดเป็นวันที่ zeroth (ในอดีตมาจากระบบปฏิบัติการ UNIX) ที่บ่งชี้ว่าทรัพยากรที่หมดอายุทันทีเช่นเดียวกับmax-age = 0ไม่ Last-modified จะบอกเบราว์เซอร์เมื่อมีการอัปเดตล่าสุดกับทรัพยากรซึ่งสามารถใช้เพื่อตัดสินใจว่าควรดึงข้อมูลใหม่หรือไม่แทนที่จะใช้ค่าแคช

บังคับให้รีเฟรชแคชจากเบราว์เซอร์

การรีโหลดยากคืออะไร?

การโหลดซ้ำจะบังคับให้ดึงทรัพยากรทั้งหมดบนเพจไม่ว่าจะเป็นเนื้อหาสคริปต์สไตล์ชีตหรือสื่อ สวยทุกอย่างใช่มั้ย?

ทรัพยากรบางอย่างอาจไม่รวมอยู่ในหน้าเว็บอย่างชัดเจน แต่สามารถดึงข้อมูลได้แบบไดนามิกโดยปกติหลังจากโหลดทุกอย่างที่ชัดเจนแล้ว

เบราว์เซอร์ไม่ทราบล่วงหน้าว่าสิ่งนี้จะเกิดขึ้นและเมื่อเป็นเช่นนั้นคำขอในภายหลัง (เริ่มต้นโดยสคริปต์โดยปกติ) จะยังคงใช้สำเนาแคชของทรัพยากรเหล่านั้นหากมี

ล้างแคชและฮาร์ดรีโหลดคืออะไร?

การดำเนินการนี้จะล้างแคชของเบราว์เซอร์ทั้งหมดซึ่งมีผลเช่นเดียวกับการโหลดซ้ำ แต่ยังทำให้ทรัพยากรที่โหลดแบบไดนามิกถูกดึงออกมาด้วยเช่นกันเพราะไม่มีอะไรในแคชดังนั้นจึงไม่มีทางเลือก!

Content Delivery Networks: แคชที่ระบุตำแหน่งทางภูมิศาสตร์

CDN เป็นมากกว่าแคช แต่การแคชเป็นหนึ่งในงานของมัน CDN จัดเก็บข้อมูลในตำแหน่งที่ตั้งที่กระจายทางภูมิศาสตร์เพื่อให้เวลาไป - กลับจากเบราว์เซอร์ในพื้นที่ทางภูมิศาสตร์ลดลง

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

CDN รับทรัพยากรผ่านจุดแลกเปลี่ยนอินเทอร์เน็ต (IXP) ซึ่งเป็นโหนดที่เป็นส่วนหนึ่งของกระดูกสันหลังของอินเทอร์เน็ต (ในรูปตัวพิมพ์ใหญ่) มีขั้นตอนที่ต้องดำเนินการเพื่อตั้งค่าการกำหนดเส้นทางการร้องขอเพื่อไปยัง CDN แทนโฮสต์เซิร์ฟเวอร์ ขั้นตอนต่อไปคือการตรวจสอบว่า CDN มีเนื้อหาปัจจุบันของเว็บไซต์ของคุณ

ในสมัยก่อน CDN ส่วนใหญ่สนับสนุนวิธีการพุช: เว็บไซต์จะพุชเนื้อหาใหม่ไปยังฮับ CDN ซึ่งจะกระจายไปยังโหนดที่กระจายตามพื้นที่

ปัจจุบัน CDN ส่วนใหญ่ใช้โปรโตคอลการแคชที่อธิบายไว้ข้างต้น (หรือคล้ายกัน) เพื่อ 1) ดาวน์โหลดทรัพยากรใหม่และ 2) รีเฟรชทรัพยากรที่มีอยู่ เบราว์เซอร์ยังคงมีแคชและไม่มีการเปลี่ยนแปลงใด ๆ ทั้งหมดที่ CDN ทำคือทำให้การถ่ายโอนทรัพยากรใหม่เร็วขึ้น