php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.08.2009, 10:41  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard HTTP Caching Header

Hi,

bisher habe ich im Framework nur auf auf Expiration-HTTP-Header gesetzt und würde jetzt gern Validation hinzufügen. Ich bin mir allerdings etwas unsicher, ob ich das auch alles richtig verstanden habe, aber hab mir schonmal diesen Plan zurechtgelegt. Wäre das so umsetzbar? Muss ich auf irgendwelche Besonderheiten achten, wie z.B. abweichende Browser-Verhalten, Proxies, die Header killen usw.? Gibt es irgendwelche inhaltlichen Fehler in dieser Strategie?

Hier der Plan:

1. Skriptseitig ist kein Caching eingestellt:
  • ETag (md5 auf Content) verwenden, um "If-None-Match" zu triggern
  • Wenn ETag gleich, dann "304 Not Modified" senden
  • funktioniert das eigentlich auch, wenn "cache-control: no-cache" vorhanden ist?
  • Spart Bandbreite, aber keine CPU Power

2. Skriptseitig ist schwaches Caching eingestellt (es wird nur das View gecacht, der Controller wird weiterhin ausgeführt):
  • ETag und Last-Modified verwenden, um "If-None-Match" und "If-Modified-Since" zu triggern
  • Spart Bandbreite und die CPU-Power zum Erstellen des Views

3. Skriptseitig ist hartes Caching eingestellt (nicht mal der Controller wird ausgeführt)
  • Expires, Cache-Control, ETag und Last-Modified senden (hat Validation Vorrang vor Expiration? Wenn ja, müsste ich die Validation-Parameter erst nach Ablauf des Caches senden)
  • Nach Ablauf des Caches Umstellen auf schwaches Caching
  • Spart Bandbreite, CPU Power und vermeidet Netzwerk-Roundtrips

Danke und Gruß,
Christoph
McSodbrenner ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 20.08.2009, 22:22  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 Christoph,

aus Erfahrung würde ich folgendes empfehlen: hartes HTTP-Caching mit versionierbaren URLs. Will heißen: wenn eine Resource seine Gültigkeit verliert, muss das über die URL erkennbar sein. Bei Bildern und CSS-/JS-Dateien ist das sehr einfach realisierbar, hier kannst du die Cache-Zeit auf 1 Jahr+ konfigurieren. Bei HTML-Dokumenten muss man etwas genauer hinsehen, es ist jedoch meistens eine Kombination aus Datum + ID + Version sinnvoll. Hierfür ist es empfehlenswert, Links automatisiert generieren zu lassen. Dann kannst du das Handling zentral ändern.

Noch ein paar Worte zu deinen Punkten:
  • ETags sind nicht zu empfehlen, weil du dauernd revalidate-Anfragen bekommst.
  • Gleiches gilt für If-None-Match-Anfragen.
  • Für effektives Caching sollte Cache-Control, Date, Last-Modified und Expires gesetzt sein.
  • Sofern du auf Server-Seite CPU sparen möchtest, ist das View-Based-Caching-Konzept sinnvoll.
Was deine Fragen zu der Priorität und Bedeutung der HTTP-Header angeht: RFC 2616
__________________
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 20.08.2009, 22:48  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

dr.E:

Zitat:
ETags sind nicht zu empfehlen, weil du dauernd revalidate-Anfragen bekommst.
du machst doch beim view-based-caching nichts anderes, du generierst einen key, ueberpruefst ob es den content gibt und gibst ihn aus. beim ETag kommt dann nurnoch dazu, das du keine daten mehr uebertragen musst.
oder sehe ich das falsch?
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 20.08.2009, 22:50  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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

Zitat:
oder sehe ich das falsch?
Ja. Ein ETag muss mit einem HEAD-HTTP-Request validiert werden. Das ist dann (fast) ebenso schlimm wie eine komplette Anfrage. Du möchtest ja im Grunde vermeiden, dass der Client deine Infrastruktur kontaktiert. Das ist weder mit einem ETag noch mit einem If-None-Match möglich.
__________________
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 20.08.2009, 23:58  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Ja. Ein ETag muss mit einem HEAD-HTTP-Request validiert werden. Das ist dann (fast) ebenso schlimm wie eine komplette Anfrage. Du möchtest ja im Grunde vermeiden, dass der Client deine Infrastruktur kontaktiert. Das ist weder mit einem ETag noch mit einem If-None-Match möglich.
ok, das ist jetzt klar.

Zitat:
aus Erfahrung würde ich folgendes empfehlen: hartes HTTP-Caching mit versionierbaren URLs. Bei HTML-Dokumenten muss man etwas genauer hinsehen, es ist jedoch meistens eine Kombination aus Datum + ID + Version sinnvoll.
wie loest du hier die problematik der externen verlinkung sowie der SuMa freundlichkeit (also kein doppelter content, dennoch soll die url zum - veraenderten - inhalt anders sein). leitest du da dann per HTTP 303 weiter?
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 21.08.2009, 09:25  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Ein ETag muss mit einem HEAD-HTTP-Request validiert werden. Das ist dann (fast) ebenso schlimm wie eine komplette Anfrage. Du möchtest ja im Grunde vermeiden, dass der Client deine Infrastruktur kontaktiert. Das ist weder mit einem ETag noch mit einem If-None-Match möglich.
Ja, aber doch immerhin gut, wenn man kein eingestelltes Caching hat. Man spart zwar keine Ressourcen auf dem Server, aber dafür doch immerhin Traffic. Und das ohne Nachteile. Übersehe ich da etwas?

Zitat:
Für effektives Caching sollte Cache-Control, Date, Last-Modified und Expires gesetzt sein.
Last-modified ist doch ein Expiration-Parameter? Ist Date tatsächlich ein Caching-relevanter Parameter?

Zitat:
Was deine Fragen zu der Priorität und Bedeutung der HTTP-Header angeht: RFC 2616
Das hatte ich mir auch schon vorgenommen, aber dazu irgendwie nichts gefunden Welche Stelle meinst du?
McSodbrenner ist offline   Mit Zitat antworten
Alt 21.08.2009, 11:12  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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

Zitat:
Ja, aber doch immerhin gut, wenn man kein eingestelltes Caching hat. Man spart zwar keine Ressourcen auf dem Server, aber dafür doch immerhin Traffic. Und das ohne Nachteile. Übersehe ich da etwas?
Nein, weil die meisten Standard-Applikationen keinen HEAD-Request unterstützen. Oder tust du das etwa?

Zitat:
Last-modified ist doch ein Expiration-Parameter? Ist Date tatsächlich ein Caching-relevanter Parameter?
Nein, aber es unterstützt den Browser bei der Entscheidung, ob ein Inhalt im Cache noch valide ist oder nicht. Date hilft im Zusammenspiel mit Last-Modified und dem max-age-Modifier bei fehlendem Expires das Ende der Gültigkeit eines Objekts zu berechnen.

Zitat:
Welche Stelle meinst du?
Die Sektionen der genannten Header...
__________________
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 21.08.2009, 13:37  
Erfahrener Benutzer
 
Registriert seit: 28.11.2008
Beiträge: 160
PHP-Kenntnisse:
Fortgeschritten
McSodbrenner befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Nein, weil die meisten Standard-Applikationen keinen HEAD-Request unterstützen. Oder tust du das etwa?
"If-Modified-Since" wird vom Client nicht per HEAD-Request geschickt, weil er ja sonst im Falle eines Hits noch einen Request schicken müsste, um den neuen Inhalt abzufordern. Stattdessen sendet er einen GET-Request, den man entweder mit einer ganz normalen Seite oder mit einem "403 Not modified" und leerem Body beantwortet.
So verstehe ich zumindest:
HTTP/1.1: Header Field Definitions (mit Anchor zur richtigen Stelle )

Zitat:
Zitat von dr.e. Beitrag anzeigen
Date hilft im Zusammenspiel mit Last-Modified und dem max-age-Modifier bei fehlendem Expires das Ende der Gültigkeit eines Objekts zu berechnen.
Die RFC stellt da keinen Zusammenhang her. Wäre doch auch überflüssig, da der Client in dem Falle seine eigene Zeit nehmen kann.

Zitat:
Zitat von dr.e. Beitrag anzeigen
Die Sektionen der genannten Header...
Hab ich durchgelesen... ich finds nicht...
McSodbrenner ist offline   Mit Zitat antworten
Alt 21.08.2009, 14:00  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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,

soweit ich
Zitat:
See section 13.3.3 for rules on how to determine if two entities tags match. The weak comparison function can only be used with GET or HEAD requests.
interpretiere, sollte das mit beiden funktionieren...

Zitat:
Wäre doch auch überflüssig, da der Client in dem Falle seine eigene Zeit nehmen kann.
Nicht ganz. Hier ist vor allem die Zeitzone des Servers interessant, die nicht immer gleich der des Clients ist.

Zitat:
Hab ich durchgelesen... ich finds nicht...
Du warst schon an den richtigen Stellen, nur meine Erfahrungen - nachdenen du vermutlich suchst - stehen da nicht drin.
__________________
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 21.08.2009, 14:41  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Datumsangaben sollten imho bei http-kram IMMER GMT sein

RFC 2616 (rfc2616) - Hypertext Transfer Protocol -- HTTP/1.1
Zitat:
All HTTP date/time stamps MUST be represented in Greenwich Mean Time
(GMT), without exception. For the purposes of HTTP, GMT is exactly
equal to UTC (Coordinated Universal Time). This is indicated in the
first two formats by the inclusion of "GMT" as the three-letter
abbreviation for time zone, and MUST be assumed when reading the
asctime format. HTTP-date is case sensitive and MUST NOT include
additional LWS beyond that specifically included as SP in the
grammar.
robo47 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
https header und Cookie TailerD PHP Tipps 2008 5 26.01.2008 19:54
header() ??? TeazY PHP Tipps 2008 9 11.01.2008 15:40
HTTP Header empfangen ? atom-dragon PHP Tipps 2005-2 16 03.09.2005 20:10
HTTP header ? atom-dragon PHP Tipps 2005-2 5 31.08.2005 19:52
[Erledigt] HTTP HEADER PHP Tipps 2005-2 1 28.07.2005 09:58
Problem: Cannot modify header information Alpha Centauri PHP Tipps 2005 11 25.04.2005 13:05
header prob mit auth und smarty PHP Tipps 2005 4 07.03.2005 12:10
[Erledigt] Datei selber nach einer Abfrage senden, header() geht nicht? PHP Tipps 2005 2 23.02.2005 05:58
Shoutcast server abfrage mittels ein http header request PHP Tipps 2004 0 30.10.2004 18:05
Link Check --- HTTP Header PHP Tipps 2004 2 18.09.2004 15:17
Warning: Cannot modify header... einbinden nicht möglich? PHP Tipps 2004 2 07.08.2004 15:06
ankommender http header in einem php script auslesen PHP Tipps 2004 0 19.07.2004 23:37
http header verändern - script zum browser machen PHP Tipps 2004 11 06.07.2004 17:43
Header Probleme! Calexico PHP Tipps 2004 7 30.06.2004 23:05
HTTP Post mit PHP (Stream Funktionen) PHP-Fortgeschrittene 12 04.06.2004 11:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
specify a cache validator, caching header, php cache header, http caching, http caching header, cache validator, header caching, php http caching, if-modified-since auslesen, http caching php, caching-header, \specify a cache validator\, php etag erstellen, specify a last-modified or etag header to enable cache validation for the following resources:, php http header abfragen, \specify a last-modified or etag header to enable cache validation for the following resources\, php header caching google, cache-validierer php, browser http caching last modified, alles cachen header

Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 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