ฉันควรส่งส่วนหัวใดให้หยุดการร้องขอทั้งหมดไปยังเซิร์ฟเวอร์ทันทีหลังจากที่เนื้อหาถูกแคช
เรามีเซิร์ฟเวอร์เวลาในการตอบสนองสูง (ถอนหายใจ, VMWare) ดังนั้นแม้การส่งHEAD
คำขอไปยังเซิร์ฟเวอร์จะใช้เวลา + 40ms
ขณะนี้เหล่านี้เป็นส่วนหัวที่ถูกส่ง / รับ;
ขอครั้งแรก
ลูกค้าส่ง;
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Pragma: no-cache, no-cache, no-cache
Cache-Control: no-cache, no-cache, no-cache
เซิร์ฟเวอร์ตอบสนอง;
HTTP/1.1 200 OK
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:51:51 GMT
Content-Type: text/plain
Vary: Accept-Encoding
Last-Modified: Tue, 31 Jan 2012 10:45:11 GMT
Content-Length: 14
Expires: Thu, 31 Jan 2013 14:51:51 GMT
Cache-Control: max-age=31536000
ดังนั้นจึงส่ง a Cache-Control
และExpires
ส่วนหัวที่ตั้งค่าเป็น 365 วันในอนาคต น่าเสียดายที่การรีเฟรชครั้งที่สองมันร้องขอวัตถุอีกครั้งด้วยIf-Modified-Since
ส่วนหัว
คำขอที่สอง
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
If-Modified-Since: Tue, 31 Jan 2012 10:45:11 GMT
Cache-Control: max-age=0
การตอบสนอง
HTTP/1.1 304 Not Modified
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:58:00 GMT
Vary: Accept-Encoding
Expires: Thu, 31 Jan 2013 14:58:00 GMT
Cache-Control: max-age=31536000
น่าเสียดายเนื่องจากซอฟต์แวร์พร็อกซีที่ล้าสมัยที่เราไม่สามารถใช้Keep-Alive
หรือวางเซิร์ฟเวอร์ / พร็อกซีอื่น ๆ ไว้หน้าแอปพลิเคชัน เรายังไม่สามารถปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์และลดเวลาแฝงของเครือข่าย ฉันพยายามคิดว่าส่วนหัวที่เราสามารถส่งเพื่อกำจัดคำขอ 301 รายการได้อย่างไร ฉันได้ลองใช้ ETags แล้ว แต่ก็ไม่ได้สร้างความแตกต่างIf-modified-since
เลย ฉันได้ลองลบLast-Modified
ส่วนหัวแล้ว แต่นั่นเป็นสาเหตุของคำขอ GET มาตรฐานโดยไม่มีการแคช (ตรวจสอบบันทึกเซิร์ฟเวอร์ยังคงได้รับคำขอ)
ลูกค้าคือการผสมผสานของ Firefox (ส่วนใหญ่), IE 7, 8 และ (บางคน) 9, Chrome และ Safari แต่พฤติกรรมนี้ดูเหมือนว่าจะปรากฏในการทดสอบเบราว์เซอร์ทั้งหมด
TL; DR;
เครือข่ายแย่มากฉันควรส่งส่วนหัวใดเพื่อบอกลูกค้าว่าไม่เคยส่งIf-modified-since
คำขอไปยังเซิร์ฟเวอร์เพื่อตรวจสอบความถูกต้องของแคชและเก็บเนื้อหาไว้ในแคชจนกว่าExpires
จะพบส่วนหัว
ฉันอาจจะขาดอะไรบางอย่างที่ชัดเจน แต่ทุกอย่างที่ฉันพยายามดูเหมือนจะให้ผลลัพธ์ที่เหมือนกัน
เรามีเซิร์ฟเวอร์ NGINX อยู่หน้าเซิร์ฟเวอร์แอปพลิเคชันของเราเพื่อให้ฉันสามารถเพิ่ม / ลบส่วนหัวใด ๆ ตามที่ฉันต้องการ พร็อกซีของเราไม่สนับสนุน Keep-Alive และพวกเขาไม่มีทางที่จะปรับปรุงประสิทธิภาพเครือข่ายที่น่าเชื่อถือ เนื่องจากการออกแบบซอฟต์แวร์ที่น่ากลัวทำให้แอปพลิเคชันโหลดทรัพยากรมากกว่า 100 รายการต่อการโหลดหน้าเว็บแต่ละครั้ง (ใช่แล้วซอฟต์แวร์ระดับองค์กรแย่มาก) ด้วยความล่าช้าประมาณ 40-50ms ต่อวัตถุ
text/plain
อย่างไร