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

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

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

อย่างไรก็ตาม เนื่องจากฟังก์ชันคลาวด์และบริการ 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 ด้วยการกำหนดค่าส่วนหัวนี้ คุณสามารถสื่อสารกับเบราว์เซอร์และ CDN ได้ว่าเนื้อหาของคุณจะถูกแคชได้นานแค่ไหน ในฟังก์ชันของคุณ คุณตั้งค่า Cache-Control ดังนี้:

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

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

  • public - ทำเครื่องหมายแคชเป็น 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 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 เฉพาะในกรณีที่แอปของคุณให้บริการเนื้อหาที่แตกต่างกัน ขึ้นอยู่กับการอนุญาตของผู้ใช้