Puncte:0

Apache Caching este dezactivat când clientul trimite antetul If-Modified-Since

drapel li

Încerc să-l fac pe Apache să memoreze în cache rezultatele rulării unui script PHP scump (accesează un server terță parte care are limitarea ratei), dar se pare că dacă clientul trimite un Dacă-Modificat-De vreme ce antet, memoria cache este ocolită.

CacheEnable disc /script.php
CacheLock activat
CacheLockMaxAge 60
CacheIgnoreHeaders Set-Cookie
# împiedică clientul să solicite în mod explicit conținut nememorizat în cache
CacheIgnoreCacheControl activat
CacheDetailHeader activat

Scriptul php setează următoarele antete în răspunsul său:

  • Modificat ultima dată setat la ora curentă, de ex. Duminică, 20 iunie 2021 11:30:20 GMT
  • Expiră setat la ora curentă plus 60 de secunde, de ex. Duminică, 20 iunie 2021 11:31:20 GMT

Dacă emit următoarea cerere:

GET /script.php HTTP/1.1
Gazdă: example.com
Conexiune: aproape

Apoi, memorarea în cache funcționează corect și scriptul php este rulat doar o dată pe minut, iar alte solicitări sunt servite din cache.

emitand insa urmatoarea cerere:

GET /script.php HTTP/1.1
Gazdă: example.com
Conexiune: aproape
În cazul în care se modifică: duminică, 20 iunie 2021 11:30:30 GMT

Rulează scriptul php de fiecare dată cu:

X-Cache-Detail: „cache miss: se încearcă salvarea entității” de la example.com

în răspuns.

Folosesc Apache 2.4.29 pe Ubuntu 18.04.

drapel no
Puteți încerca să setați cele două anteturi? `"CacheIgnoreNoLastMod On"` și `"CacheIgnoreHeaders If-Modified-Since"`
drapel li
@SreerajKarichery nu se schimbă de la setarea acestor setări în mod_cache
djdomi avatar
drapel za
ar putea exista o șansă de a folosi ` Antet nesetat Ultima modificare Antetul dezactivat Dacă-Modificat-De când ` sau similar
drapel li
@djdomi nu, nicio schimbare. Cred că am încercat deja asta, nu sunt sigur că antetele sunt eliminate înainte ca mod_cache să le vadă
djdomi avatar
drapel za
de aceea ar trebui să încerci să-l elimini :)
djdomi avatar
drapel za
Apropo, am găsit poate un punct interesant pentru tine: https://stackoverflow.com/questions/10847157/handling-if-modified-since-header-in-a-php-script
Puncte:0
drapel za

Manualul Mod-Cache de la Apache.org

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

Utilizarea jurnalelor personalizate pentru a identifica problema

CustomLog "cached-requests.log" comun env=cache-hit
CustomLog „uncached-requests.log” comun env=cache-miss
CustomLog "revalidated-requests.log" common env=cache-revalidate
CustomLog "invalidated-requests.log" common env=cache-invalidate

Activați antetul X-Cache-Detail

CacheDetailHeader activat

Setați să Ignorați șirurile de control din cache de interogări

CacheIgnoreCacheControl Activat
CacheIgnoreQueryString activat

Utilizarea unui token de sesiune precum url.com/my.php?jsessionid=123 nu ar trebui să fie memorată în cache sau chiar separat

CacheIgnoreURLSessionIdentifiers jsessenionid

Folosiți factorul MINIM modificat, acea cerere necache va fi livrată 0.0 = 0% sau 1.0 = 100%

CacheLastModifiedFactor 0,99

Setați timpul minim pentru memorarea în cache validă (implicit 0)

CacheMinExpire 3600

Eliminați antetul if-Modfied înainte ca acesta să ia măsuri

Antet nesetat Ultima modificare 
* Poate fi folosit și în htaccess

Acest lucru este mai degrabă de depanat la început, deoarece nu s-ar încadra într-un comentariu, dar ar trebui să ajute Inc să crească stocarea în cache a oricărui obiect.

drapel li
`CacheDetailHeader` este deja activat. `CacheIgnoreCacheControl` este deja activat. `CacheIgnoreQueryString` este nedorit deoarece șirul de interogare modifică rezultatul returnat. `CacheIgnoreURLSessionIdentifiers` nu va schimba nimic, deoarece nu există un ID de sesiune în adresa URL. `CacheLastModifiedFactor` și `CacheMinExpire` se aplică numai când `Expires` nu este specificat. `Header unset` nu pare să afecteze comportamentul lui `mod_cache`
djdomi avatar
drapel za
Există o a doua modalitate, dar o face puțin mai confuză, folosiți Nginx în fața Apache-ului, are mai mult control asupra stocării în cache.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.