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

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 อย่างสมบูรณ์

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

ตั้งค่า Cache-Control

เครื่องมือหลักที่คุณใช้จัดการแคชสำหรับเนื้อหาแบบไดนามิกคือส่วนหัว 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 แคชเนื้อหาเป็นเวลา 5 นาที (ดูการควบคุมเฉพาะสำหรับการแคช CDN ได้ที่ s-maxage ด้านล่าง)

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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับส่วนหัว Cache-Control ได้ใน Mozilla Developer Network และเอกสารประกอบสําหรับนักพัฒนาเว็บของ Google

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

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

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

ส่วนหัว 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

เมื่อใช้การตั้งค่าเหล่านี้ ระบบจะแคชคำขอ 2 รายการที่เหมือนกันแต่มีส่วนหัว 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 เฉพาะในกรณีที่แอปแสดงเนื้อหาที่แตกต่างกันโดยขึ้นอยู่กับการให้สิทธิ์ของผู้ใช้