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?

29
demandé sur Alexis Wilke 2010-06-15 22:21:12

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!

10
répondu Alan Storm 2010-06-15 18:50:14

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.

27
répondu technomage 2011-12-11 14:09:57

j'ai eu un problème similaire avec Pragma: nocache

session_cache_limiter(false); avant session_start(); semble le supprimer.

11
répondu Mahks 2012-01-04 02:06:20

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.

6
répondu BalusC 2010-06-15 18:53:50

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.

3
répondu Michael Butler 2011-12-20 18:25:32

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.

1
répondu Colonel Sponsz 2010-06-15 18:24:49

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.

0
répondu twunde 2012-08-13 22:44:39

Exécuter grep -R pragma . chercher dans les fichiers.

-1
répondu mcandre 2010-06-15 18:31:43