Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

Firebase Hosting ใช้ CDN ระดับโลกที่มีประสิทธิภาพเพื่อทำให้เว็บไซต์ของคุณเร็วที่สุด

เนื้อหาแบบคงที่ใดที่ร้องขอถูกแคชโดยอัตโนมัติบน CDN หากคุณทำให้เนื้อหาของไซต์ใช้งานได้อีกครั้ง โฮสติ้ง Firebase จะล้างเนื้อหาสแตติกที่แคชไว้ทั้งหมดของคุณโดยอัตโนมัติใน CDN จนกว่าจะถึงคำขอครั้งต่อไป

อย่างไรก็ตาม เนื่องจากบริการ Cloud Functions และ Cloud Run สร้างเนื้อหาแบบไดนามิก เนื้อหาสำหรับ URL ที่กำหนดอาจแตกต่างกันไปตามสิ่งต่างๆ เช่น การป้อนข้อมูลของผู้ใช้หรือข้อมูลประจำตัวของผู้ใช้ การบัญชีสำหรับเรื่องนี้ขอให้ได้รับการจัดการโดยรหัสแบ็กเอนด์ไม่แคชบน CDN โดยค่าเริ่มต้น

คุณสามารถแม้ว่าการกำหนดค่าแคชลักษณะการทำงานสำหรับเนื้อหาแบบไดนามิก ตัวอย่างเช่น หากฟังก์ชันสร้างเนื้อหาใหม่เป็นระยะเท่านั้น คุณสามารถเพิ่มความเร็วของแอปได้โดยการแคชเนื้อหาที่สร้างขึ้นเป็นเวลาอย่างน้อยช่วงเวลาสั้นๆ

คุณยังสามารถลดต้นทุนการดำเนินการของฟังก์ชันได้ เนื่องจากเนื้อหาถูกแสดงจาก CDN แทนที่จะใช้ฟังก์ชันที่ทริกเกอร์ อ่านเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพการดำเนินงานฟังก์ชั่นและบริการใน ฟังก์ชั่นคลาวด์ และ ระบบคลาวด์เรียก เอกสาร

เรียนรู้เพิ่มเติมเกี่ยวกับพฤติกรรมของแคชใน Google ของ เอกสารนักพัฒนาเว็บ

ตั้งค่าการควบคุมแคช

เครื่องมือหลักที่คุณใช้ในการจัดการแคชสำหรับเนื้อหาแบบไดนามิกเป็น Cache-Control ส่วนหัว ด้วยการกำหนดค่าส่วนหัวนี้ คุณสามารถสื่อสารกับทั้งเบราว์เซอร์และ CDN ว่าเนื้อหาของคุณจะถูกแคชได้นานแค่ไหน ในการทำงานของคุณคุณตั้งค่า Cache-Control ชอบโดย:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

ในส่วนหัวของตัวอย่างนี้ คำสั่งจะทำสามสิ่ง:

  • public - Marks แคชเป็น public ซึ่งหมายความว่าทั้งเบราว์เซอร์และเซิร์ฟเวอร์กลาง (หมายถึง CDN สำหรับ Firebase Hosting) สามารถแคชเนื้อหา

  • max-age - บอกเบราว์เซอร์และ CDN วิธีการหลายวินาทีที่พวกเขาสามารถแคชเนื้อหา เมื่อหมดเวลาที่ตั้งไว้ เบราว์เซอร์และ CDN จะต้องตรวจสอบเนื้อหาอีกครั้งด้วยเซิร์ฟเวอร์ต้นทาง ในส่วนหัวตัวอย่างเช่นเรากำลังช่วยให้เบราว์เซอร์และ CDN แคชเนื้อหาสำหรับห้านาที (ดู s-maxage ด้านล่างสำหรับการควบคุมที่เฉพาะเจาะจงสำหรับ CDN แคช)

  • s-maxage - แทนที่ max-age สั่งสำหรับ CDN-แคชเท่านั้น บอก CDN ว่าสามารถแคชเนื้อหาได้กี่วินาที เมื่อหมดเวลาที่ตั้งไว้ CDN จะต้องตรวจสอบเนื้อหาอีกครั้งด้วยเซิร์ฟเวอร์ต้นทาง ในส่วนหัวตัวอย่างเช่นเรากำลังเอาชนะการตั้งค่าสำหรับ max-age สำหรับ CDN เท่านั้นและให้ CDN แคชเนื้อหาสำหรับสิบนาที

สำหรับ max-age และ s-maxage ตั้งค่าของพวกเขาเป็นจำนวนเงินที่ยาวที่สุดของเวลาที่คุณสะดวกสบายกับผู้ใช้งานได้รับเนื้อหาเก่า หากหน้ามีการเปลี่ยนแปลงทุกๆ สองสามวินาที ให้ใช้ค่าเวลาเล็กน้อย อย่างไรก็ตาม เนื้อหาประเภทอื่นๆ สามารถแคชได้อย่างปลอดภัยเป็นเวลาหลายชั่วโมง วัน หรือเป็นเดือน

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการ Cache-Control หัวบน Mozilla พัฒนาเครือข่าย และของ 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 คุกกี้หากแอปของคุณให้บริการเนื้อหาที่แตกต่างกันขึ้นอยู่กับการอนุมัติของผู้ใช้