สำหรับคำถามสุดท้ายของคุณทำไม ฉันจะพยายามอธิบายสิ่งที่ฉันรู้
คำอธิบายสั้น ๆ เกี่ยวกับรหัสสถานะทั้งสามในเงื่อนไขของคนธรรมดา
- 200 - สำเร็จ (คำขอของเบราว์เซอร์และรับไฟล์จากเซิร์ฟเวอร์)
หากการแคชถูกเปิดใช้งานในเซิร์ฟเวอร์
- 200 (จากแคชหน่วยความจำ) - ไฟล์ที่พบในเบราว์เซอร์เบราว์เซอร์จึงไม่ได้รับการร้องขอจากเซิร์ฟเวอร์
- 304 - เบราว์เซอร์ร้องขอไฟล์ แต่ถูกปฏิเสธโดยเซิร์ฟเวอร์
สำหรับเบราว์เซอร์บางไฟล์กำลังตัดสินใจที่จะร้องขอจากเซิร์ฟเวอร์และสำหรับบางเบราว์เซอร์กำลังตัดสินใจที่จะอ่านจากไฟล์ที่เก็บไว้ (แคช) ทำไมนี้ ทุกไฟล์มีวันหมดอายุดังนั้น
หากไฟล์ยังไม่หมดอายุเบราว์เซอร์จะใช้จากแคช (200 แคช)
หากไฟล์หมดอายุเบราว์เซอร์จะขอเซิร์ฟเวอร์สำหรับไฟล์ ไฟล์ตรวจสอบเซิร์ฟเวอร์ทั้งในสถานที่ (เบราว์เซอร์และเซิร์ฟเวอร์) หากพบไฟล์เดียวกันเซิร์ฟเวอร์ปฏิเสธคำขอ ตามเบราว์เซอร์โปรโตคอลใช้ไฟล์ที่มีอยู่
ดูการกำหนดค่า nginx นี้
location / {
add_header Cache-Control must-revalidate;
expires 60;
etag on;
...
}
ที่นี่เวลาหมดอายุถูกตั้งค่าเป็น 60 วินาทีดังนั้นไฟล์สแตติกทั้งหมดจะถูกแคชเป็นเวลา 60 วินาที ดังนั้นหากคุณร้องขอไฟล์อีกครั้งภายใน 60 วินาทีเบราว์เซอร์จะอ่านจากหน่วยความจำ (200 หน่วยความจำ) หากคุณขอหลังจากเบราว์เซอร์ 60 วินาทีจะขอเซิร์ฟเวอร์ (304)
ฉันสันนิษฐานว่าไฟล์จะไม่เปลี่ยนแปลงหลังจาก 60 วินาทีในกรณีนี้คุณจะได้รับ 200 (เช่นไฟล์ที่อัปเดตจะถูกดึงมาจากเซิร์ฟเวอร์)
ดังนั้นหากเซิร์ฟเวอร์ถูกกำหนดค่าด้วยการหมดอายุและการแคชส่วนหัว (นโยบาย) ที่แตกต่างกันสถานะอาจแตกต่างกัน
ในกรณีของคุณคุณใช้ cdn วัตถุประสงค์หลักของ cdn คือความพร้อมใช้งานสูงและการจัดส่งที่รวดเร็ว ดังนั้นพวกเขาจึงใช้เซิร์ฟเวอร์หลายเครื่อง แม้ว่าดูเหมือนว่าไฟล์จะอยู่ในไดเรกทอรีเดียวกัน cdn อาจใช้เซิร์ฟเวอร์หลายเครื่องเพื่อจัดทำเนื้อหา u หากเซิร์ฟเวอร์เหล่านั้นมีการกำหนดค่าที่แตกต่างกัน จากนั้นสถานะเหล่านี้สามารถเปลี่ยนแปลงได้ หวังว่ามันจะช่วย