ฉันพยายามที่จะมีพฤติกรรมพื้นฐานเกี่ยวกับกลยุทธ์การแคชของฉัน: ไฟล์ควรถูกแคชและตรวจสอบความถูกต้องกับเซิร์ฟเวอร์ใหม่ทุกครั้ง ดังนั้นฉันอยากให้ Apache ส่ง 304 กลับมา
นี่คือกล่องโต้ตอบที่เกิดขึ้นสำหรับการรีเฟรชเบราว์เซอร์แต่ละครั้ง:
Status Code:200 OK
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie: ...
Host:...
If-Modified-Since:Tue, 14 Oct 2014 15:10:37 GMT
If-None-Match:"1461-505636af08fcd-gzip"
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Response Headers
Accept-Ranges:bytes
Cache-Control:No-cache
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1412
Content-Type:text/html
Date:Tue, 14 Oct 2014 16:58:05 GMT
ETag:"1461-505636af08fcd-gzip"
Keep-Alive:timeout=5, max=99
Last-Modified:Tue, 14 Oct 2014 15:10:37 GMT
Server:Apache/2.4.6 (Ubuntu)
Vary:Accept-Encoding
(นี่คือจาก Chrome devtools โดยไม่ได้เลือกที่จะไม่ใช้แคช)
คุณสามารถเห็นว่าการตอบสนองประกอบด้วย Cache-Control: No-cache Header และหัวข้อ If-modified-ตั้งแต่ตรงกับ Last-modified ETag ก็ตรงกันเช่นกัน
Apache ไม่ควรส่ง 304 ในกรณีนี้หรือ
แก้ไข
ปิดใช้งาน ETags ใน apache ด้วย
Header unset ETag
ทำให้พฤติกรรมแคชคาดการณ์ได้มากขึ้น ...
Cache-Control:max-age=0
ปิดการใช้งานแคชดังนั้นคุณจะเห็นการCache-Control:No-cache
ตอบสนอง