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