จัดการการทำงานของแคช

Firebase Hosting ใช้ CDN ทั่วโลกที่มีประสิทธิภาพเพื่อทำให้เว็บไซต์โหลดเร็วที่สุด เท่าที่จะเป็นไปได้

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

แต่เนื่องจากบริการ Cloud Functions และ Cloud Run สร้าง เนื้อหาแบบไดนามิก เนื้อหาของ URL ที่ระบุอาจแตกต่างกันตามปัจจัยต่างๆ เป็นอินพุตหรือข้อมูลประจำตัวของผู้ใช้ เพื่ออธิบายเรื่องนี้ คำขอที่ ซึ่งจัดการโดยโค้ดแบ็กเอนด์จะไม่แคชใน CDN โดยค่าเริ่มต้น

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

ในทำนองเดียวกัน คุณก็สามารถกำหนดค่าลักษณะการแคชที่อาจลดฟังก์ชันได้ ต้นทุนในการดำเนินการเนื่องจากเนื้อหาแสดงจาก CDN ไม่ใช่จาก เป็นฟังก์ชันที่ทริกเกอร์ อ่านเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพการทำงานของฟังก์ชันและบริการ ใน Cloud Functions และ Cloud Run เอกสารประกอบ

ข้อยกเว้นคือคำขอที่แสดงข้อผิดพลาด 404 CDN จะแคช การตอบสนอง 404 ของบริการต่อ URL ที่ไม่มีอยู่จริงเป็นเวลา 10 นาทีเพื่อให้ คำขอสำหรับ URL ดังกล่าวจะถูกแสดงนอก CDN หากคุณเปลี่ยนบริการ เพื่อให้มีเนื้อหาอยู่ที่ URL นี้ CDN จะยังคงแสดงโฆษณาที่แคชต่อไป 404 เป็นเวลา 10 นาที (มากที่สุด) จากนั้นจะแสดงเนื้อหาจาก URL นั้นตามปกติ

หากการตอบกลับ 404 มีส่วนหัวการแคชที่ตั้งค่าไว้โดย บริการ Cloud Functions หรือ Cloud Run จะลบล้าง เริ่มต้น 10 นาที และกำหนดลักษณะการแคชของ CDN

ดูข้อมูลเพิ่มเติมเกี่ยวกับลักษณะการแคชในบัญชี เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์เว็บ

ตั้งค่าการควบคุมแคช

เครื่องมือหลักที่คุณใช้จัดการแคชสำหรับเนื้อหาแบบไดนามิกคือ ส่วนหัว Cache-Control เมื่อกำหนดค่าส่วนหัวนี้ คุณจะสามารถสื่อสารทั้งกับ เบราว์เซอร์และ CDN เพื่อดูว่าสามารถแคชเนื้อหาของคุณได้นานแค่ไหน ในฟังก์ชัน คุณตั้งค่า Cache-Control ดังนี้

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

ในตัวอย่างนี้ คําสั่งทํา 3 สิ่งดังนี้

  • public — ทำเครื่องหมายแคชเป็น public ซึ่งหมายความว่าทั้งเบราว์เซอร์และ เซิร์ฟเวอร์กลาง (หมายถึง CDN สำหรับ Firebase Hosting) สามารถแคชได้ เนื้อหานั้น

  • max-age — บอกเบราว์เซอร์และ CDN ว่าสามารถแคชได้กี่วินาที เนื้อหานั้น เมื่อหมดเวลาที่กำหนดไว้ เบราว์เซอร์และ CDN ตรวจสอบความถูกต้องของเนื้อหาอีกครั้งด้วยเซิร์ฟเวอร์ต้นทาง ในส่วนหัวตัวอย่าง ซึ่งอนุญาตให้เบราว์เซอร์และ CDN แคชเนื้อหาเป็นเวลาห้านาที (โปรดดู s-maxageด้านล่างสำหรับการควบคุมเฉพาะสำหรับการแคช CDN)

  • s-maxage — ลบล้างคําสั่ง max-age สําหรับการแคช CDN เท่านั้น บอก CDN ว่าสามารถแคชเนื้อหาได้นานกี่วินาที เมื่อถึงเวลาที่ตั้งไว้ หากหมดอายุ CDN จะต้องตรวจสอบความถูกต้องเนื้อหาอีกครั้งกับเซิร์ฟเวอร์ต้นทาง ใน ส่วนหัวตัวอย่าง เราจะลบล้างการตั้งค่าสำหรับ max-age สำหรับ CDN เท่านั้น และปล่อยให้ CDN แคชเนื้อหาเป็นเวลา 10 นาที

สำหรับ max-age และ s-maxage ให้กำหนดค่าเป็นระยะเวลานานที่สุด ที่คุณสบายใจที่จะให้ผู้ใช้ได้รับเนื้อหาที่ไม่มีอัปเดต หากหน้าเว็บมีการเปลี่ยนแปลงทุกๆ 2-3 วินาที ให้ใช้ค่าเวลาขนาดเล็ก อย่างไรก็ตาม เนื้อหาประเภทอื่นๆ สามารถแคชได้อย่างปลอดภัยเป็นเวลาหลายชั่วโมง วัน หรือแม้แต่หลายเดือน

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับส่วนหัวของ Cache-Control ใน เครือข่ายนักพัฒนาซอฟต์แวร์ Mozilla และในบัญชี เอกสารประกอบสำหรับนักพัฒนาเว็บ

เนื้อหาที่แคชไว้จะแสดงเมื่อใด

เบราว์เซอร์และ CDN จะแคชเนื้อหาโดยอิงจากข้อมูลต่อไปนี้

  • ชื่อโฮสต์
  • เส้นทาง
  • สตริงการค้นหา
  • เนื้อหาของส่วนหัวของคำขอที่ระบุในส่วนหัวของ Vary

เปลี่ยนแปลงส่วนหัว

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

Firebase Hosting จะตั้งค่าส่วนหัว Vary ที่เหมาะสมใน สำหรับสถานการณ์ทั่วไป ส่วนใหญ่แล้ว คุณไม่จำเป็นต้องกังวล เกี่ยวกับส่วนหัว Vary อย่างไรก็ตาม ในบางกรณีการใช้งานขั้นสูง คุณอาจมีส่วนหัวอื่นๆ ที่ต้องการให้ส่งผลต่อแคช ในกรณีนี้ คุณสามารถกำหนดส่วนหัว Vary ในคำตอบได้ เช่น

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

ในกรณีนี้ ค่าของส่วนหัว Vary คือ

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

ด้วยการตั้งค่าเหล่านี้ สองคำขอที่เหมือนกันทุกประการแต่มี ส่วนหัว X-My-Custom-Header แคชแยกต่างหาก โปรดทราบว่า Hosting เพิ่ม Cookie และ Authorization ในส่วนหัว Vary โดยค่าเริ่มต้นเมื่อมีคำขอ สร้างขึ้นเพื่อเนื้อหาแบบไดนามิก ซึ่งช่วยให้มั่นใจว่าการให้สิทธิ์เซสชันหรือคุกกี้ ส่วนหัวที่คุณใช้เป็นส่วนหนึ่งของคีย์แคช ซึ่งช่วยป้องกันการรั่วไหลโดยไม่ตั้งใจ ของเนื้อหา

นอกจากนี้ โปรดทราบว่า

  • ระบบจะแคชได้เฉพาะคำขอ GET และ HEAD เท่านั้น คำขอ HTTPS ที่ใช้คำขออื่น จะไม่มีการแคช

  • โปรดใช้ความระมัดระวังเมื่อเพิ่มการตั้งค่าในส่วนหัว Vary ยิ่งคุณเพิ่มการตั้งค่ามากเท่าใด โอกาสที่ CDN จะแสดงเนื้อหาที่แคชไว้ก็ยิ่งน้อยลง นอกจากนี้ โปรดทราบว่า Vary จะอิงตามส่วนหัวของ request ไม่ใช่ response ส่วนหัว

การใช้คุกกี้

เมื่อใช้ Firebase Hosting ร่วมกับ Cloud Functions หรือ Cloud Run โดยทั่วไปแล้วคุกกี้จะถูกตัดออกจากคำขอที่เข้ามา ช่วงเวลานี้ เป็นสิ่งที่จำเป็นเพื่อให้ลักษณะการทำงานของแคช CDN มีประสิทธิภาพ เฉพาะคุกกี้ __session ที่มีชื่อพิเศษเท่านั้นที่ได้รับอนุญาตให้ส่งผ่านไปยัง การดำเนินการกับแอปของคุณ

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