Qu'est-ce qui pourrait ajouter "Pragma:no-cache" à mes en-têtes de réponse? (Apache, PHP)
j'ai un site web dont j'ai hérité, qui est un gros bordel Poilu.
L'une des choses que je fais est d'améliorer les performances. Entre autres choses, j'ajoute Expires
en-têtes pour les images.
maintenant, il y a quelques images qui sont servies à travers un fichier PHP, et je remarque qu'elles ont le Expires
header, mais ils sont aussi chargés à chaque fois.
en Regardant les en-Têtes de Réponse, je vois ceci:
Expires Wed, 15 Jun 2011 18:11:55 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
ce Qui explique évidemment problème.
maintenant, j'ai regardé partout dans la base de code, et il ne dit pas "pragma" n'importe où. .htaccess ne semble pas non plus avoir de lien.
N'importe quelles idées ce qui pourrait mettre ces en-têtes" pragma "(et" cache-contrôle"), et comment puis-je l'éviter?
8 réponses
créer un fichier simple qui n'inclut aucune de vos bibliothèques PHP mais qui vit dans le même dossier que le fichier qui sert vos images à travers un fichier PHP.
file: test.php
demandez ce fichier à l'aide d'un navigateur et vérifiez les en-têtes. Si vous voyez les en-têtes de réponse que vous ne voulez pas, vous savez qu'ils sont configurés via apache et non générés via un fichier PHP et vous pouvez concentrer vos recherches sur .fichier htaccess dans l'arborescence du répertoire, et sur le http.confg et autres inclus fichiers de configuration apache. Vous aurez envie de rechercher
<Directory....
et
<VirtualHost
sections qui peuvent s'appliquer à votre site.
si vous ne voyez pas les en-têtes dans une requête pour ce simple fichier PHP, vous savez que PHP met les en-têtes quelque part. A la fin de votre fichier image serving (ou juste après lui echos l'image et sort), mais le morceau de PHP suivant)
var_dump(get_included_files());
Demande d'une image par le biais de la diffusion d'images d'URL. Que l'extrait de code ci-dessus Imprimez tous les fichiers PHP utilisés dans la requête. (vous aurez probablement besoin de voir la source ou d'utiliser curl pour voir la sortie brute, car le navigateur va déclarer une image invalide)
ayant un sous-ensemble de vos fichiers à traiter, cherchez les appels vers le
header();
fonction. header
la fonction est la seule façon (je pense) que raw code PHP peut définir des en-têtes de Réponse. Vous voudrez également rechercher
call_user_func
eval
$$
au cas où il y aurait un code dynamique sur la page C'est utiliser les capacités de méta-programmation de PHP pour appeler le header
fonction.
Bonne chance!
le coupable peut être php.ini, où la session.cache_limiter=nocache. Changez la valeur à blanc ou public pour éviter les en-têtes anti-cachetage.
j'ai eu un problème similaire avec Pragma: nocache
session_cache_limiter(false);
avant session_start();
semble le supprimer.
Essayez de désactiver les en-têtes .htaccess
. L'exemple ci-dessous va les désactiver pour tous les fichiers correspondant aux extensions ico
, jpeg
,png
,gif
,js
,css
:
<FilesMatch "\.(ico|jpeg|png|gif|js|css)$">
Header unset Cache-Control
Header unset Pragma
</FilesMatch>
Vous pouvez trouver quelques indices dans cet article.
je l'ai fait au moment de l'exécution avec ceci:
header("Pragma:");
qui a forcé le script à désactiver L'en-tête Pragma.
Si ce n'est pas dans .htaccess il peut être dans le fichier de configuration Apache principal - ou l'un de ses includes, selon la configuration.
il vaut la peine de noter pour les personnes ayant des problèmes similaires que de nombreux cadres ajouteront automatiquement des en-têtes, en particulier ceux de la mise en cache. Il est assez facile de les surcharger dans la bibliothèque framework ou dans votre application.