it-swarm.com.de

Was könnte das Hinzufügen von "Pragma: no-cache" zu meinen Antwort-Headern sein? (Apache, PHP)

Ich habe eine Website, deren Wartung ich geerbt habe, die ein großes haariges Durcheinander ist.
Ich verbessere unter anderem die Leistung. Unter anderem füge ich Expires Header zu Bildern hinzu.

Nun gibt es einige Bilder, die über eine PHP -Datei bereitgestellt werden, und ich stelle fest, dass sie den Header Expires haben, sie werden jedoch jedes Mal geladen.

Wenn ich mir die Antwort-Header ansehe, sehe ich Folgendes:

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

Das erklärt natürlich das Problem.

Jetzt habe ich die gesamte Codebasis durchgesehen und es steht nirgendwo "Pragma". .htaccess scheint auch nichts zu tun zu haben.

Irgendwelche Ideen, was diese "Pragma" - (und "Cache-Control" -) Header sein könnten, und wie kann ich das vermeiden?

29
Daniel Magliola

Erstellen Sie eine einfache Datei, die keine Ihrer PHP Bibliotheken enthält, sich jedoch in demselben Ordner befindet wie die Datei, in der Ihre Bilder über eine PHP Datei bereitgestellt werden.

file: test.php

Fordern Sie diese Datei über einen Browser an und überprüfen Sie die Header. Wenn Sie die Antwort-Header sehen, die Sie nicht möchten, wissen Sie, dass sie über Apache konfiguriert und nicht über eine PHP -Datei generiert wurden, und Sie können Ihre Suche auf die .htaccess-Datei in der Verzeichnisstruktur konzentrieren. und auf der http.confg und anderen enthaltenen Apache-Konfigurationsdateien. Du wirst suchen wollen

<Directory....

und

<VirtualHost

abschnitte, die für Ihre Website gelten können.

Wenn Sie die Überschriften in einer Anfrage für diese einfache PHP Datei nicht sehen, wissen Sie, dass PHP die Überschriften irgendwo setzt. Am Ende Ihrer Image-Serving-Datei (oder direkt nachdem das Image wiedergegeben und beendet wurde), aber das folgende PHP Snippet)

var_dump(get_included_files());

Fordern Sie ein Bild über die Bildserver-URL an. Das obige Snippet druckt alle in der Anfrage verwendeten PHP -Dateien aus. (Sie müssen wahrscheinlich den Quellcode anzeigen oder Curl verwenden, um die unformatierte Ausgabe zu sehen, da der Browser ein ungültiges Bild meldet.)

Durchsuchen Sie eine Untergruppe Ihrer zu bearbeitenden Dateien nach Aufrufen von

header();

funktion. Die Funktion header ist (meiner Meinung nach) die einzige Möglichkeit, mit der roher PHP Code Antwort-Header setzen kann. Sie werden auch suchen wollen

call_user_func
eval
$$

falls es irgendeinen dynamischen Code auf der Seite gibt, der die Metaprogrammierfunktionen von PHP verwendet, um die Funktion header aufzurufen.

Viel Glück!

10
Alan Storm

Der Täter kann php.ini sein, wobei session.cache_limiter = nocache ist. Ändern Sie den Wert in "leer" oder "öffentlich", um die Anti-Cache-Header zu vermeiden.

27
technomage

Ich hatte ein ähnliches Problem mit Pragma: nocache

session_cache_limiter(false); vor session_start(); schien es zu unterdrücken.

11
Mahks

Versuchen Sie, die Überschriften in .htaccess zu deaktivieren. Im folgenden Beispiel werden sie für alle Dateien deaktiviert, die den Erweiterungen ico, jpeg, png, gif, js, css entsprechen:

<FilesMatch "\.(ico|jpeg|png|gif|js|css)$">
    Header unset Cache-Control
    Header unset Pragma
</FilesMatch>

Einige Hinweise finden Sie in diesem Artikel .

7
BalusC

Ich habe das zur Laufzeit so gemacht:

header("Pragma:");

dies zwang das Skript, den Pragma-Header zu deaktivieren.

3
Michael Butler

Wenn es sich nicht in .htaccess befindet, befindet es sich möglicherweise in der Apache-Hauptkonfigurationsdatei - oder in einem seiner Includes, je nach Setup.

1
Colonel Sponsz

Es ist für Leute mit ähnlichen Problemen erwähnenswert, dass viele Frameworks automatisch Header hinzufügen, insbesondere solche, die zwischengespeichert werden. Es ist ziemlich einfach, sie entweder in der Framework-Bibliothek oder in Ihrer App zu überladen.

0
twunde