Score:0

Apache Caching ถูกปิดใช้งานเมื่อไคลเอ็นต์ส่งส่วนหัว If-Modified-Since

ธง li

ฉันพยายามให้ Apache แคชผลลัพธ์จากการเรียกใช้สคริปต์ PHP ราคาแพง (เข้าถึงเซิร์ฟเวอร์ของบุคคลที่สามซึ่งมีการจำกัดอัตรา) แต่ดูเหมือนว่าไคลเอนต์จะส่ง ถ้าแก้ไขตั้งแต่ ส่วนหัวแคชถูกข้าม

ดิสก์ CacheEnable /script.php
เปิดแคชล็อค
CacheLockMaxAge 60
CacheIgnoreHeaders Set-คุกกี้
# ป้องกันไม่ให้ไคลเอนต์ขอเนื้อหาที่ไม่ได้แคชอย่างชัดเจน
CacheIgnoreCacheControl บน
เปิดใช้ CacheDetailHeader

สคริปต์ php ตั้งค่าส่วนหัวต่อไปนี้ในการตอบสนอง:

  • แก้ไขล่าสุด ตั้งเป็นเวลาปัจจุบัน เช่น อา. 20 มิ.ย. 2564 11:30:20 GMT
  • หมดอายุ ตั้งเป็นเวลาปัจจุบัน บวก 60 วินาที เช่น อา. 20 มิถุนายน 2564 11:31:20 GMT

ถ้าฉันออกคำขอต่อไปนี้:

รับ /script.php HTTP/1.1
โฮสต์: example.com
การเชื่อมต่อ: ปิด

จากนั้นการแคชจะทำงานได้อย่างถูกต้องและสคริปต์ php จะทำงานเพียงนาทีละครั้งโดยมีการร้องขออื่น ๆ จากแคช

อย่างไรก็ตามการออกคำขอดังต่อไปนี้:

รับ /script.php HTTP/1.1
โฮสต์: example.com
การเชื่อมต่อ: ปิด
If-Modified-Since: อา. 20 มิ.ย. 2021 11:30:30 GMT

เรียกใช้สคริปต์ php ทุกครั้งด้วย:

X-Cache-Detail: "แคชหายไป: กำลังพยายามบันทึกเอนทิตี" จาก example.com

ในการตอบสนอง

ฉันใช้ Apache 2.4.29 บน Ubuntu 18.04

no flag
คุณลองตั้งค่าส่วนหัวทั้งสองได้ไหม `"CacheIgnoreNoLastMod On"` และ `"CacheIgnoreHeaders If-Modified-Since"`
li flag
@SreerajKarichery ไม่มีการเปลี่ยนแปลงจากการตั้งค่าเหล่านั้นใน mod_cache
djdomi avatar
za flag
อาจมีโอกาสที่จะใช้ ` ส่วนหัวไม่ได้ตั้งค่า Last-Modified ส่วนหัวยกเลิกการตั้งค่า If-Modified-Since ` หรือคล้ายกัน
li flag
@djdomi ไม่ ไม่เปลี่ยนแปลง ฉันคิดว่าฉันได้ลองทำแล้ว ฉันไม่แน่ใจว่าส่วนหัวจะถูกลบออกก่อนที่ mod_cache จะเห็น
djdomi avatar
za flag
นั่นเป็นเหตุผลที่คุณควรพยายามลบออก :)
djdomi avatar
za flag
อย่างไรก็ตามฉันพบประเด็นที่น่าสนใจสำหรับคุณ: https://stackoverflow.com/questions/10847157/handling-if-modified-since-header-in-a-php-script
Score:0
ธง za

คู่มือ Mod-Cache จาก Apache.org

https://httpd.apache.org/docs/2.4/mod/mod_cache.html

การใช้ Custom Logs เพื่อระบุปัญหา

CustomLog "cached-requests.log" ทั่วไป env=cache-hit
CustomLog "uncache-requests.log" ทั่วไป env=cache-miss
CustomLog "revalidated-requests.log" ทั่วไป env=cache-revalidate
CustomLog "invalidated-requests.log" ทั่วไป env=cache-invalidate

เปิดใช้งานส่วนหัว X-Cache-Detail

เปิดใช้ CacheDetailHeader

ตั้งค่าให้ละเว้นสตริงการควบคุมแคชแบบสอบถาม

CacheIgnoreCacheControl เปิดอยู่
CacheIgnoreQueryString บน

การใช้โทเค็นเซสชัน เช่น url.com/my.php?jsessionid=123 ไม่ควรแคชหรือแยกกัน

CacheIgnoreURLSessionIdentifiers jsessenionid

ใช้ปัจจัยที่แก้ไขขั้นต่ำ คำขอที่ไม่ได้แคชจะถูกส่ง 0.0 = 0% หรือ 1.0 = 100%

CacheLastModifiedFactor 0.99

ตั้งเวลาขั้นต่ำสำหรับการแคชที่ถูกต้อง (ค่าเริ่มต้น 0)

CacheMinหมดอายุ 3600

ลบ if-Modfied Header ก่อนที่จะดำเนินการ

ส่วนหัวไม่ได้ตั้งค่า Last-Modified 
* สามารถใช้ใน htaccess ได้

นี่เป็นการแก้ไขจุดบกพร่องในตอนแรกเนื่องจากจะไม่พอดีกับความคิดเห็น แต่ควรช่วยเพิ่มการแคชของอ็อบเจกต์ใด ๆ

li flag
`CacheDetailHeader` เปิดอยู่แล้ว `CacheIgnoreCacheControl` เปิดอยู่แล้ว ไม่พึงปรารถนา `CacheIgnoreQueryString` เนื่องจากสตริงข้อความค้นหาเปลี่ยนผลลัพธ์ที่ส่งคืน `CacheIgnoreURLSessionIdentifiers` จะไม่เปลี่ยนแปลงสิ่งใดเนื่องจากไม่มี ID เซสชันใน URL `CacheLastModifiedFactor` และ `CacheMinExpire` จะใช้เมื่อไม่ได้ระบุ `Expires` เท่านั้น `Header unset` ดูเหมือนจะไม่ส่งผลต่อพฤติกรรมของ `mod_cache`
djdomi avatar
za flag
มีวิธีที่สอง แต่ทำให้สับสนมากขึ้น ใช้ Nginx แทน Apache ซึ่งสามารถควบคุมการแคชได้มากกว่า

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา