php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.09.2009, 16:51  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard Caching-Probleme!?

Hallo,

ich habe ein aus meiner Sicht höchst skurriles Problem. Es könnte etwas mit Caching zu tun haben, allerdings spricht die Logik auch wieder dagegen. Hier nun die Erklärung der "Anwendung" (vereinfacht dargestellt, damit es verständlich bleibt):

file1.php generiert per Zufall einen Token und gibt ein Iframe aus. In dem Iframe wird als URL file2.php geladen, und der Token übergeben.

Sowohl file1.php als auch file2.php speichern den generierten bzw. den übergebenen Token in der Datenbank ab.

Nun zeigt sich bei einigen Usern, die diese Architektur aufrufen, das Problem, dass in file1.php zwar immer ein neuer Token generiert und auch in der DB gespeichert wird (Datei wird somit aufgerufen und nicht aus dem Cache geladen), in file2.php aber jedes mal der beim aller ersten Aufruf generierte Token in der DB gespeichert wird (Datei wird somit eigentlich auch aufgerufen, und nicht aus dem Cache geladen), obwohl ja EIGENTLICH von file1.php ein Iframe ausgegeben wird, in dessen URL der neue Token steht.

Das Problem tritt zwar nur bei ca. 5 % der geprüften Aufrufe auf, allerdings kann die Zahl höher sein, da dieses Problem natürlich nicht auftritt, wenn der Aufruf nur einmal erfolgt. Zwischen den unterschiedlichen Aufrufen liegen jeweils mehrere Sekunden bis Minuten. Browser sind alle vertreten, auch (fast) aktuelle Browser Firefox 3.5.2 und IE 7 / 8.

Um Caching auszuschließen haben ich im Falle des IE die Header Cache-Control: no-cache und Expires: -1 übergeben. In allen anderen Fällen Cache-Control: no-cache, no-store, max-age=0, must-revalidate und Expires: Sat, 1 Jan 2000 00:00:00 GMT. Zudem wird bei allen Browsern Pragma: no-cache übergeben.

Darüber hinaus habe ich das System zeitweise so verändert, dass file1.php ein Javascript ausgibt, in welchen ein zweiter Token auf der Client-Seite generiert und das Iframe ausgegeben wird:

Code:
document.write('<iframe src="file2.php?token=[SERVER_TOKEN]&token2='+new String (Math.random()).substring(5, 15)+'"><\/iframe>');
Leider alles ohne Erfolg...

Es scheint so, als würde zwar der Request für file1.php beim Server landen, der Response allerdings aus dem (Proxy)-Cache geladen werden...

Woran kann dies liegen?

Geändert von R4v3r (10.09.2009 um 16:56 Uhr).
R4v3r ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.09.2009, 22:18  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo,

ein ähnlicher Effekt tritt gerne mal bei AJAX-Requests im IE auf. Ich denke die Ursache ist das dynamische Hinzufügen des IFrame-Nodes. Versuche es doch mal mit direktem ausgeben.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 10.09.2009, 22:30  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard

Hi dr.e.,

das habe ich zuerst versucht. Mit der Dynamik hatte ich mir erhofft, das Caching (oder was auch immer) zu verhindern.

Gruß
R4v3r ist offline   Mit Zitat antworten
Alt 10.09.2009, 22:39  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Dann schau dir mal mit LiveHTTPHeaders (FF-Plugin) die genauen Response-Header von deinem Server an. Ich kann mir das nicht vorstellen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 11.09.2009, 16:19  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard

Der Server spuckt mir neben den Standard-Headern nur die Caching-Header aus, die ich definiere. Ich habe gestern Abend aber mal die Header geändert (Ursprungszustand siehe oben).

Nun nutze ich:

Code:
header("Expires: -1");
header("Cache-Control: private, no-store, no-cache");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
In der Zeit hat sich die "Problem-Quote" um 1/3 reduziert... Ich kann jetzt natürlich nicht sagen, ob es dadurch bedingt ist, oder Zufall.

Welche Caching-Header sollte ich nutzen, um sowohl das Client- als auch das Proxycaching soweit wie möglich auszuschließen? Wenn ich per Google suche, finde ich zwar jede Menge Vorschläge, allerdings ist jeder anders, und häufig sind sogar Werte enthalten, die gar nicht in der RFC des HTTP Protokolls enthalten sind....

LG
R4v3r ist offline   Mit Zitat antworten
Alt 11.09.2009, 21:16  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hi,

Zitat:
Welche Caching-Header sollte ich nutzen, um sowohl das Client- als auch das Proxycaching soweit wie möglich auszuschließen?
Hier sind "Cache-Control", "Expires" und "Last Modified" relevant. Die letzten beiden müssen mit einem Datum gemäß RFC 822 gefüllt sein, der erste sollte auf "no-cache" stehen.

Zitat:
Der Server spuckt mir neben den Standard-Headern nur die Caching-Header aus, die ich definiere.
Mach mal ein wget -vdS auf die beiden Files und poste das Ergebnis mal. Ich glaube da stimmt einfach noch irgendwas nicht mit den Headern.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 13.09.2009, 23:56  
Benutzer
 
Benutzerbild von Nico_Schubert
 
Registriert seit: 27.02.2008
Beiträge: 94
PHP-Kenntnisse:
Fortgeschritten
Nico_Schubert befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

mit dem nachfolgenden Code Beispiel wird die Datei immer neu ausgeliefert.

PHP-Code:
<?php
header
("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); // immer geändert
header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0"false);
header("Pragma: no-cache");
?>
Dies sollte dein Problem lösen. Wenn du prüfen möchtest, was dein Java Script für einen Header zurückliefert, kann ich dir das Tool Page Speed von Google empfehlen.

Grüße Nico
__________________
Benötigst Du hilfe zu Php? Dann schau doch mal meine Tutorials an. Hier bekommst Du Php Webspace für deine Php Scripte.
Nico_Schubert ist offline   Mit Zitat antworten
Alt 14.09.2009, 12:07  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard

Hallo dr.e.,

habe es mit wget getestet und es wird genau das ausgegeben, was ich angegeben habe.

Hallo Nico,

hast du diese Konstellation selbst erfolgreich getestet oder einfach nur auf die Schnelle bei Google gefunden? Wenn ich per Google Suche, finde ich jede Menge derartiger Scripte, die angeblich jegliches Caching verhindern. Fehlen tut aber jeweils z. B. die Angabe "private", damit keine Proxys cachen... Außerdem ist in den Kommentaren zu "header" folgendes zu finden: PHP: header - Manual
R4v3r ist offline   Mit Zitat antworten
Alt 14.09.2009, 12:46  
Benutzer
 
Benutzerbild von Nico_Schubert
 
Registriert seit: 27.02.2008
Beiträge: 94
PHP-Kenntnisse:
Fortgeschritten
Nico_Schubert befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von R4v3r Beitrag anzeigen
Hallo dr.e.,

habe es mit wget getestet und es wird genau das ausgegeben, was ich angegeben habe.

Hallo Nico,

hast du diese Konstellation selbst erfolgreich getestet oder einfach nur auf die Schnelle bei Google gefunden? Wenn ich per Google Suche, finde ich jede Menge derartiger Scripte, die angeblich jegliches Caching verhindern. Fehlen tut aber jeweils z. B. die Angabe "private", damit keine Proxys cachen... Außerdem ist in den Kommentaren zu "header" folgendes zu finden: PHP: header - Manual
Huhu,

also ich habe das bei mehren Projekten bei mir in Verwendung und habe nie deswegen ein Problem festgestellt. Muss dazu sagen, das bei den IE 6 immer eine neue Seite geliefert wird. Das Problem kann ich nicht bestätigen.

Grüße Nico
__________________
Benötigst Du hilfe zu Php? Dann schau doch mal meine Tutorials an. Hier bekommst Du Php Webspace für deine Php Scripte.
Nico_Schubert ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CHarset und Probleme mit IE KeKs0r HTML, Usability und Barrierefreiheit 10 26.01.2010 21:59
HTTP Caching Header McSodbrenner Software-Design 16 24.08.2009 09:44
[Erledigt] fopen() Probleme jN^ PHP Tipps 2009 2 18.08.2009 12:31
[Erledigt] Firefox / IE - Probleme HTML, Usability und Barrierefreiheit 5 20.07.2009 17:04
Probleme bei Speicherung von serialize() Strings Manni2k PHP Tipps 2006 13 15.10.2006 15:06
Probleme mit Rechteverteilung chmod() per script!!!??? Funky_ PHP Tipps 2006 7 17.06.2006 17:10
[Erledigt] Smarty: Ist Caching sinnvoll? PHP-Fortgeschrittene 10 30.11.2005 21:46
Probleme bei der Installation von Turck MMCache tomx992 PHP-Fortgeschrittene 2 27.09.2005 20:31
Probleme beim Datenupload zu meiner Datenbank Datenbanken 3 05.09.2005 19:47
Probleme mit Sonderzeichen... Datenbanken 1 02.08.2005 23:37
[Erledigt] hilfe! probleme mit... PHP Tipps 2005 4 12.04.2005 22:55
Zwei Rechner ins Netz - Router - Hub - Probleme... imported_Ben Off-Topic Diskussionen 37 13.01.2005 21:36
[Erledigt] Technische Probleme mit Sessions PHP-Fortgeschrittene 4 18.11.2004 14:45
[Erledigt] template-Systeme &amp; caching PHP Tipps 2004 27 04.09.2004 14:03
Caching Performance PHP-Fortgeschrittene 2 13.07.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mehrere iframes html firefox cache, probleme beim caching, caching probleme, chaching probleme, firefox iframe cache

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:18 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum