Firebase Hosting ใช้ CDN ทั่วโลกที่ทรงพลังเพื่อทำให้ไซต์ของคุณเร็วที่สุด
เนื้อหาสแตติก ที่ร้องขอใด ๆ จะถูกแคชโดยอัตโนมัติใน CDN หากคุณปรับใช้เนื้อหาของไซต์อีกครั้ง Firebase Hosting จะล้างเนื้อหาคงที่ที่แคชไว้ทั้งหมดของคุณใน CDN โดยอัตโนมัติจนกว่าจะมีคำขอถัดไป
อย่างไรก็ตาม เนื่องจากบริการ Cloud Functions และ Cloud Run สร้างเนื้อหาแบบไดนามิก เนื้อหาสำหรับ URL ที่กำหนดจึงอาจแตกต่างกันไปตามสิ่งต่างๆ เช่น การป้อนข้อมูลของผู้ใช้หรือข้อมูลระบุตัวตนของผู้ใช้ ด้วยเหตุนี้ คำขอที่จัดการโดยโค้ดแบ็กเอนด์จะ ไม่ แคชใน CDN ตามค่าเริ่มต้น ยกเว้นคำขอที่ส่งกลับข้อผิดพลาด 404 หากต้องการล้างผลลัพธ์ 404 ที่แคชไว้ ให้ปรับใช้โฮสติ้ง Firebase อีกครั้ง การปรับใช้ Cloud Functions และ Cloud Run ใหม่ ไม่ได้ ทำให้แคชใช้ไม่ได้โดยอัตโนมัติ
แต่คุณ กำหนดค่าพฤติกรรมการแคชสำหรับเนื้อหาไดนามิกได้ ตัวอย่างเช่น หากฟังก์ชันสร้างเนื้อหาใหม่เป็นระยะๆ เท่านั้น คุณสามารถเพิ่มความเร็วแอปของคุณได้โดยการแคชเนื้อหาที่สร้างขึ้นเป็นระยะเวลาสั้นๆ เป็นอย่างน้อย
คุณยังสามารถลดค่าใช้จ่ายในการดำเนินการฟังก์ชันได้ เนื่องจากเนื้อหาให้บริการจาก CDN แทนที่จะผ่านฟังก์ชันที่เรียกใช้งาน อ่านเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพการทำงานของฟังก์ชันและบริการในเอกสารประกอบของ Cloud Functions และ Cloud Run
เรียนรู้เพิ่มเติมเกี่ยวกับพฤติกรรมการแคชใน เอกสารสำหรับนักพัฒนาเว็บ ของ Google
ตั้งค่าการควบคุมแคช
เครื่องมือหลักที่คุณใช้ในการจัดการแคชสำหรับเนื้อหาไดนามิกคือส่วนหัว Cache-Control
ด้วยการกำหนดค่าส่วนหัวนี้ คุณสามารถสื่อสารกับทั้งเบราว์เซอร์และ CDN ว่าสามารถแคชเนื้อหาของคุณได้นานแค่ไหน ในฟังก์ชั่นของคุณ คุณตั้งค่า Cache-Control
ดังนี้:
res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
ในส่วนหัวของตัวอย่างนี้ คำสั่งจะทำสามสิ่ง:
public
— ทำเครื่องหมายแคชเป็นpublic
ซึ่งหมายความว่าทั้งเบราว์เซอร์ และ เซิร์ฟเวอร์ระดับกลาง (หมายถึง CDN สำหรับโฮสติ้ง Firebase) สามารถแคชเนื้อหาได้max-age
— บอกเบราว์เซอร์และ CDN ว่าสามารถแคชเนื้อหาได้กี่วินาที เมื่อหมดเวลาที่กำหนด เบราว์เซอร์และ CDN จะต้องตรวจสอบความถูกต้องของเนื้อหาอีกครั้งกับเซิร์ฟเวอร์ต้นทาง ในส่วนหัวของตัวอย่าง เราอนุญาตให้เบราว์เซอร์และ CDN แคชเนื้อหาเป็นเวลาห้านาที (ดูs-maxage
ด้านล่างสำหรับการควบคุมเฉพาะสำหรับการแคช CDN)s-maxage
— ลบล้างคำสั่งmax-age
สำหรับการแคช CDN เท่านั้น บอก CDN ว่าสามารถแคชเนื้อหาได้กี่วินาที เมื่อหมดเวลาที่กำหนด CDN จะต้องตรวจสอบความถูกต้องของเนื้อหาอีกครั้งกับเซิร์ฟเวอร์ต้นทาง ในส่วนหัวของตัวอย่าง เราจะลบล้างการตั้งค่าสำหรับmax-age
สำหรับ CDN เท่านั้น และอนุญาตให้ CDN แคชเนื้อหาเป็นเวลาสิบนาที
สำหรับ max-age
และ s-maxage
ให้ตั้งค่าเป็นระยะเวลานานที่สุดที่คุณพอใจที่จะให้ผู้ใช้ได้รับเนื้อหาที่ไม่อัปเดต หากหน้าเปลี่ยนทุกๆ 2-3 วินาที ให้ใช้ค่าเวลาที่น้อย อย่างไรก็ตาม เนื้อหาประเภทอื่นๆ สามารถแคชได้อย่างปลอดภัยเป็นเวลาหลายชั่วโมง เป็นวัน หรือแม้แต่เป็นเดือน
คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับส่วนหัวของ Cache-Control
ที่ Mozilla Developer Network และใน เอกสารประกอบสำหรับนักพัฒนาเว็บ ของ Google
เนื้อหาแคชจะให้บริการเมื่อใด
เบราว์เซอร์และ 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
ต่างกันจะถูกแคชแยกกัน โปรดทราบว่าโฮสติ้งจะเพิ่ม Cookie
และ Authorization
ในส่วนหัว Vary
ตามค่าเริ่มต้นเมื่อมีการส่งคำขอสำหรับเนื้อหาแบบไดนามิก สิ่งนี้ทำให้มั่นใจได้ว่าส่วนหัวการให้สิทธิ์เซสชันหรือคุกกี้ที่คุณใช้เป็นส่วนหนึ่งของแคชคีย์ ซึ่งป้องกันการรั่วไหลของเนื้อหาโดยไม่ตั้งใจ
หมายเหตุ:
สามารถแคชได้เฉพาะคำขอ
GET
และHEAD
เท่านั้น คำขอ HTTPS ที่ใช้วิธีอื่นจะไม่แคชโปรดใช้ความระมัดระวังเมื่อเพิ่มการตั้งค่าในส่วนหัว
Vary
ยิ่งคุณเพิ่มการตั้งค่ามากเท่าใด โอกาสที่ CDN จะแสดงเนื้อหาที่แคชไว้ก็จะยิ่งน้อยลงเท่านั้น โปรดจำไว้ว่าVary
ขึ้นอยู่กับส่วนหัว ของคำขอ ไม่ใช่ส่วนหัวของ การตอบสนอง
การใช้คุกกี้
เมื่อใช้ Firebase Hosting ร่วมกับ Cloud Functions หรือ Cloud Run คุกกี้จะถูกตัดออกจากคำขอที่เข้ามา นี่เป็นสิ่งจำเป็นเพื่อให้ การทำงานของแคช CDN มีประสิทธิภาพ เฉพาะคุกกี้ __session
ที่มีชื่อพิเศษเท่านั้นที่ได้รับอนุญาตให้ส่งผ่านไปยังการดำเนินการของแอปของคุณ
เมื่อมีอยู่ คุกกี้ __session
จะถูกสร้างให้เป็นส่วนหนึ่งของแคชคีย์โดยอัตโนมัติ หมายความว่าเป็นไปไม่ได้ที่ผู้ใช้สองคนที่มีคุกกี้ต่างกันจะได้รับการตอบสนองที่แคชของอีกฝ่าย ใช้คุกกี้ __session
หากแอปของคุณให้บริการเนื้อหาที่แตกต่างกันขึ้นอยู่กับการให้สิทธิ์ของผู้ใช้เท่านั้น