Kom ihåg mig?

Caching i browser av dynamisk url

Ämnesverktyg Visningsalternativ
Oläst 2011-10-24, 07:43 #1
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Standard Caching i browser av dynamisk url

Hej,
genererar en bild (.png) från en dynamisk url av typen /script.php?hej=3&hå=4

Hur kan jag tvinga browsern att cacha bilden ifråga?
Verkar inte som om varken IE eller firefox bryr sig.

Så här ser headern ut:
Citat:
Server: nginx
Date: Mon, 24 Oct 2011 05:42:12 GMT
Content-Type: image/png
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.3.3-1ubuntu9.5
Pragma: public
Cache-Control: maxage=86400
Expires: Tue, 25 Oct 2011 05:42:12 GMT

200 OK
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-10-24, 10:20 #2
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
Servern ska väl returnera status 304 och inte 200, något som apache sköter av sig själv om det är en statisk fil.

Jag har kollat en nginx-server som vi använder på jobbet och den skickar 304. Det enda jag kan se i confen ang detta är följande:

Kod:
if (-f $request_filename) {
    expires 30d;
    break;
}
Kanske en liten hjälp på vägen...
znap är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-10-24, 10:23 #3
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
Oj, missade att det var en dynamiskt genererad bild.

Testa med att skicka http status 304 "Not Modified"
znap är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-11-03, 03:33 #4
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
Jag har knappat ihop lite kod för en liknande grej tidigare.

$lastmodts är unix timestamp (alltså sekunder sedan 1970, 4 bytes) för senaste uppdatering. Måste inte vara från filemtime(), kan lika gärna t.ex. hämtas från databasen. Man kan även gå direkt på att skapa en datum/tid-sträng ($lastmod), men den måste i så fall vara rätt formaterad.

PHP-kod:
<?php
$lastmodts
=filemtime('file.ext');
$lastmod=gmdate('D, d M Y H:i:s',$lastmodts).' GMT';

if(isset(
$_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE']==$lastmod)
{
    
header('HTTP/1.1 304 Not Modified');
    die();
}

header('Last-Modified: '.$lastmod);
header('Cache-Control: public');
header('Pragma: public');
?>
Koden måste förstås ligga högt upp i skriptet innan något skickas till webbläsaren.

Eventuellt behöver man även lägga till en rad sist i .htaccess:
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]

Alternativt kan man behöva använda apache_request_headers() istället för $_SERVER, beroende på hur PHP är installerat.
BjörnJ är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 21:19.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017