Catch up on highlights from Firebase at Google I/O 2023. Learn more

จัดการพฤติกรรมแคช

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