<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Kommentare zu: HTTP 304 Not Modified &#8211; Performancesteigerung kann so einfach sein</title>
	<atom:link href="http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/</link>
	<description>Optimierung und Tipps zur Beschleunigung von PHP und MySQL</description>
	<lastBuildDate>Tue, 01 May 2012 16:51:11 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Von: Bachsau</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-57245</link>
		<dc:creator>Bachsau</dc:creator>
		<pubDate>Tue, 01 May 2012 16:51:11 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-57245</guid>
		<description>Eine bessere und moderene Methode ist der etag. http://de.wikipedia.org/wiki/HTTP_ETag</description>
		<content:encoded><![CDATA[<p>Eine bessere und moderene Methode ist der etag. <a href="http://de.wikipedia.org/wiki/HTTP_ETag" rel="nofollow">http://de.wikipedia.org/wiki/HTTP_ETag</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tobias Vogt#</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-31666</link>
		<dc:creator>Tobias Vogt#</dc:creator>
		<pubDate>Sun, 02 May 2010 09:07:33 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-31666</guid>
		<description>Spannend ist auch das setzen der Expire-Header mit einem Datum in der Zukunft bei allen externen Ressourcen. Wichtig ist es, mit z.B. Firebug zu kontrollieren, wie viele HTTP-Request der Browser beim Aufruf einer Unterseite machen muss. Im Idealfall ist das eine f&#252;r die Seite und dann ausschlie&#223;lich jeweils eine Abfrage f&#252;r alle neue Ressourcen. Der Vorteil daran besteht darin das PHP nicht mal mehr ausgef&#252;hrt werden muss und man so, gerade bei Gro&#223;projekten, die Server noch recht schmal halten kann.</description>
		<content:encoded><![CDATA[<p>Spannend ist auch das setzen der Expire-Header mit einem Datum in der Zukunft bei allen externen Ressourcen. Wichtig ist es, mit z.B. Firebug zu kontrollieren, wie viele HTTP-Request der Browser beim Aufruf einer Unterseite machen muss. Im Idealfall ist das eine f&#252;r die Seite und dann ausschlie&#223;lich jeweils eine Abfrage f&#252;r alle neue Ressourcen. Der Vorteil daran besteht darin das PHP nicht mal mehr ausgef&#252;hrt werden muss und man so, gerade bei Gro&#223;projekten, die Server noch recht schmal halten kann.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: UMTS Flatrate</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-29402</link>
		<dc:creator>UMTS Flatrate</dc:creator>
		<pubDate>Wed, 16 Dec 2009 00:00:28 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-29402</guid>
		<description>Super Idee - und gute Doku - vielen Dank - jetzt wird gebastelt :-)

Cheers, Daniel</description>
		<content:encoded><![CDATA[<p>Super Idee &#8211; und gute Doku &#8211; vielen Dank &#8211; jetzt wird gebastelt <img src='http://phpperformance.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Cheers, Daniel</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Nico Schubert</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-29267</link>
		<dc:creator>Nico Schubert</dc:creator>
		<pubDate>Mon, 14 Dec 2009 07:51:17 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-29267</guid>
		<description>Was zu erw&#228;hnen noch in diesen Artikel ist, das man 

header(&#039;Last-Modified: &#039; . gmdate(&quot;D, d M Y H:i:s&quot;, $LAST_CHANGE_SERVERSIDE ) . &quot; GMT&quot;);

senden sollte, damit der Browser einen Wert &#252;bermittelt und die Variable $_SERVER[&#039;HTTP_IF_MODIFIED_SINCE&#039;] bef&#252;llt wird, damit beim n&#228;chsten Seitenaufruf auf diese zur&#252;ckgegriffen werden kann.

Gr&#252;&#223;e Nico</description>
		<content:encoded><![CDATA[<p>Was zu erw&#228;hnen noch in diesen Artikel ist, das man </p>
<p>header(&#039;Last-Modified: &#039; . gmdate(&#034;D, d M Y H:i:s&#034;, $LAST_CHANGE_SERVERSIDE ) . &#034; GMT&#034;);</p>
<p>senden sollte, damit der Browser einen Wert &#252;bermittelt und die Variable $_SERVER['HTTP_IF_MODIFIED_SINCE'] bef&#252;llt wird, damit beim n&#228;chsten Seitenaufruf auf diese zur&#252;ckgegriffen werden kann.</p>
<p>Gr&#252;&#223;e Nico</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tim</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-29132</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Fri, 11 Dec 2009 12:09:00 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-29132</guid>
		<description>Prima, wieder ein sinnvolles Plugin mehr f&#252;r den Firefirx, danke.

Danke auch f&#252;r die ausf&#252;hrliche Erkl&#228;rung, ich bin dann mal meine Header ein wenig anpassen. *g*</description>
		<content:encoded><![CDATA[<p>Prima, wieder ein sinnvolles Plugin mehr f&#252;r den Firefirx, danke.</p>
<p>Danke auch f&#252;r die ausf&#252;hrliche Erkl&#228;rung, ich bin dann mal meine Header ein wenig anpassen. *g*</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Jan</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-29131</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Fri, 11 Dec 2009 11:54:35 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-29131</guid>
		<description>HTTP-Header kannst Du mit dem FF-Plugin Live HTTP Headers &#252;berpr&#252;fen.

Wenn man es richtig macht, wird direkt aus dem Brwosercache geladen, ohne den Server &#252;berhaupt zu fragen. Da Du aber must-revalidate drin hast, wird der Server gefragt (dabei der Last-Modified-zeitstempel der Browser-Cache-Version der Ressource mitgeschickt) und wenn der Server einen 304 zur&#252;ckliefert, dann nutzt der Browser die Ressource aus dem Cache.

Ohne must-revalidate nimmt er es direkt ausm Browsercache.
Du musst eben entscheiden, ob die Ressource sich in der Zwischenzeit eventuell ver&#228;ndern kann. Wenn ja, dann ist ein must-revalidate sinnvoll. Bei Bildern oder &#228;hnliche staischen, sich nie ver&#228;ndernden Ressourcen (bzw. bei solchen, bei denen es nicht schlimm ist, wenn die alte Version ausgeliefert wird) braucht man must-revalidate nicht. Dann kann es direkt aus dem Browser-Cache geladen werden.</description>
		<content:encoded><![CDATA[<p>HTTP-Header kannst Du mit dem FF-Plugin Live HTTP Headers &#252;berpr&#252;fen.</p>
<p>Wenn man es richtig macht, wird direkt aus dem Brwosercache geladen, ohne den Server &#252;berhaupt zu fragen. Da Du aber must-revalidate drin hast, wird der Server gefragt (dabei der Last-Modified-zeitstempel der Browser-Cache-Version der Ressource mitgeschickt) und wenn der Server einen 304 zur&#252;ckliefert, dann nutzt der Browser die Ressource aus dem Cache.</p>
<p>Ohne must-revalidate nimmt er es direkt ausm Browsercache.<br />
Du musst eben entscheiden, ob die Ressource sich in der Zwischenzeit eventuell ver&#228;ndern kann. Wenn ja, dann ist ein must-revalidate sinnvoll. Bei Bildern oder &#228;hnliche staischen, sich nie ver&#228;ndernden Ressourcen (bzw. bei solchen, bei denen es nicht schlimm ist, wenn die alte Version ausgeliefert wird) braucht man must-revalidate nicht. Dann kann es direkt aus dem Browser-Cache geladen werden.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tim</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-29129</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Fri, 11 Dec 2009 11:37:06 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-29129</guid>
		<description>Wie kann man eigentlich kontrollieren ob ein 304er gesendet wurde? Wenn ich mir die Header mit YSlow oder Page Speed angucke, taucht nirgends ein 304er auf, sondern immer nur ein 200 (cache).

Verstehe ich es richtig das gar nicht erst der Server angefragt wird, sondern direkt die gecachte Version genutzt wird?

P.S. ich schicke folgenden Header mit:

header(&quot;Cache-Control: max-age=57600, must-revalidate&quot;);</description>
		<content:encoded><![CDATA[<p>Wie kann man eigentlich kontrollieren ob ein 304er gesendet wurde? Wenn ich mir die Header mit YSlow oder Page Speed angucke, taucht nirgends ein 304er auf, sondern immer nur ein 200 (cache).</p>
<p>Verstehe ich es richtig das gar nicht erst der Server angefragt wird, sondern direkt die gecachte Version genutzt wird?</p>
<p>P.S. ich schicke folgenden Header mit:</p>
<p>header(&#034;Cache-Control: max-age=57600, must-revalidate&#034;);</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Christof</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-28357</link>
		<dc:creator>Christof</dc:creator>
		<pubDate>Wed, 25 Nov 2009 15:49:44 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-28357</guid>
		<description>@MrNice

Ja, sicherlich. Nur hat ein z.B. in irgendwelchen Templatesystemen integriertes Caching noch die Aufgabe, festzustellen, ob sich Inhalte ge&#228;ndert haben, bevor es entscheiden kann, ob es von Platte liefert, oder nicht. Wenn ich aber selbst wei&#223;, dass ich die Daten in der DB  ge&#228;ndert habe, kann ich z.B. per rsync-Skript (auch automatisch) die Dateien auf dem Webserver l&#246;schen, die dann nachfolgend automatisch wieder neu generiert werden. Damit spart man sich f&#252;r weitere Auslieferungen jeglichen Aufruf von PHP et al. Man hat damit also eine rein statische Webseite. Und die liefert nun mal am schnellsten aus.</description>
		<content:encoded><![CDATA[<p>@MrNice</p>
<p>Ja, sicherlich. Nur hat ein z.B. in irgendwelchen Templatesystemen integriertes Caching noch die Aufgabe, festzustellen, ob sich Inhalte ge&#228;ndert haben, bevor es entscheiden kann, ob es von Platte liefert, oder nicht. Wenn ich aber selbst wei&#223;, dass ich die Daten in der DB  ge&#228;ndert habe, kann ich z.B. per rsync-Skript (auch automatisch) die Dateien auf dem Webserver l&#246;schen, die dann nachfolgend automatisch wieder neu generiert werden. Damit spart man sich f&#252;r weitere Auslieferungen jeglichen Aufruf von PHP et al. Man hat damit also eine rein statische Webseite. Und die liefert nun mal am schnellsten aus.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: MrNice</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-28354</link>
		<dc:creator>MrNice</dc:creator>
		<pubDate>Wed, 25 Nov 2009 14:40:26 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-28354</guid>
		<description>@Christof ist das nicht die Vorgehensweise eines normalen Cachingsystems? :P</description>
		<content:encoded><![CDATA[<p>@Christof ist das nicht die Vorgehensweise eines normalen Cachingsystems? <img src='http://phpperformance.de/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Christof</title>
		<link>http://phpperformance.de/http-304-not-modified-performancesteigerung-kann-so-einfach-sein/comment-page-1/#comment-28288</link>
		<dc:creator>Christof</dc:creator>
		<pubDate>Mon, 23 Nov 2009 19:00:38 +0000</pubDate>
		<guid isPermaLink="false">http://phpperformance.de/?p=453#comment-28288</guid>
		<description>Ein ebenfalls interessanter Weg, Caching den Proxies und Browsern zu &#252;berlassen und zus&#228;tzlich die hohe Performance des Auslieferns des Webservers zu nutzen, ist folgender:

Man linkt auf eine .html-Datei. Wenn diese nicht vorhanden ist, tritt ein 404 Error auf. Nun schreibt man eine php-Routine, die den Inhalt der Seite generiert, ausliefert und diesen in genau die gesuchte .html-Datei schreibt.

Wenn diese Routine in einem PHP-File /chreate.php steht, nimmt man dieses als Error-Dokument und schreibt in die .htaccess (oder in die Konfiguration des Webservers):

ErrorDocument 403 /create.php
ErrorDocument 404 /create.php

Damit wird das Dokument nur beim erstmaligen Zugriff eines beliebigen Benutzers der Webseite generiert. Alle folgenden erhalten eine statische Seite geliefert, inklusive &quot;not modified&quot;, falls sich das Dokument seit dem letzten Zugriff nicht ge&#228;ndert hat.

Will man die Inhalte &#228;ndern, schreibt man sie z.B. neu in die Datenbank und l&#246;scht die .html-Datei. Dann wird sie beim n&#228;chsten Zugriff wieder neu generiert. So kriegt man eine extrem schnelle Webseite.</description>
		<content:encoded><![CDATA[<p>Ein ebenfalls interessanter Weg, Caching den Proxies und Browsern zu &#252;berlassen und zus&#228;tzlich die hohe Performance des Auslieferns des Webservers zu nutzen, ist folgender:</p>
<p>Man linkt auf eine .html-Datei. Wenn diese nicht vorhanden ist, tritt ein 404 Error auf. Nun schreibt man eine php-Routine, die den Inhalt der Seite generiert, ausliefert und diesen in genau die gesuchte .html-Datei schreibt.</p>
<p>Wenn diese Routine in einem PHP-File /chreate.php steht, nimmt man dieses als Error-Dokument und schreibt in die .htaccess (oder in die Konfiguration des Webservers):</p>
<p>ErrorDocument 403 /create.php<br />
ErrorDocument 404 /create.php</p>
<p>Damit wird das Dokument nur beim erstmaligen Zugriff eines beliebigen Benutzers der Webseite generiert. Alle folgenden erhalten eine statische Seite geliefert, inklusive &#034;not modified&#034;, falls sich das Dokument seit dem letzten Zugriff nicht ge&#228;ndert hat.</p>
<p>Will man die Inhalte &#228;ndern, schreibt man sie z.B. neu in die Datenbank und l&#246;scht die .html-Datei. Dann wird sie beim n&#228;chsten Zugriff wieder neu generiert. So kriegt man eine extrem schnelle Webseite.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

