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 นาที (ดูs-maxage
การควบคุมเฉพาะสำหรับการแคช CDN ได้ที่ด้านล่าง)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
จะอิงตามส่วนหัวคําขอ ไม่ใช่ส่วนหัวการตอบกลับ
การใช้คุกกี้
เมื่อใช้ Firebase Hosting ร่วมกับ Cloud Functions หรือ Cloud Run โดยทั่วไประบบจะนำคุกกี้ออกจากคำขอขาเข้า ซึ่งจำเป็นต้องใช้เพื่อให้ลักษณะการทำงานของแคช CDN มีประสิทธิภาพ
เฉพาะคุกกี้ __session
ที่มีชื่อพิเศษเท่านั้นที่ได้รับอนุญาตให้ส่งผ่านไปยังการดำเนินการของแอป
หากมี คุกกี้ __session
จะเป็นส่วนหนึ่งของคีย์แคชโดยอัตโนมัติ ซึ่งหมายความว่าผู้ใช้ 2 รายที่มีคุกกี้ต่างกันจะไม่สามารถรับการตอบกลับที่แคชไว้ของอีกฝ่ายได้ ใช้คุกกี้ __session
เฉพาะในกรณีที่แอปแสดงเนื้อหาที่แตกต่างกันโดยขึ้นอยู่กับการให้สิทธิ์ของผู้ใช้