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
ก็ต่อเมื่อ
แสดงเนื้อหาที่แตกต่างกันตามการให้สิทธิ์ของผู้ใช้