2010-11-08 21 views
0
<?php 
    chdir('../../../../'); 
    include('bootstrap.php'); 

    $place = isset($_GET['place']) ? (is_array($_GET['place'])) ? intval($_GET['place'][0]) : intval($_GET['place'])  : null; 

    $query = mysql_query("SELECT `place`, `image`, `imagetype` FROM `topvideo` WHERE `place` = '" . $place . "'"); 
    if (mysql_num_rows($query)) 
    { 
     while ($row = mysql_fetch_array($query)) 
     { 
      $im = imagecreatefromstring($row['image']); 
      if ($im !== false) 
      { 
       header('Cache-Control: public, proxy-revalidate'); 
       header('Last-Modified:Mon, 02 Nov 2009 09:50:18 GMT'); 
       header('Expires: ' . gmdate ("D, d M Y H:i:s", time() + 60 * 60 * 24 * 24 . ' GMT'); 

       header('Content-Type: image/jpeg'); 
       imagejpeg($im); 
       imagedestroy($im); 
      } 
     } 
    } 

La réponse est toujours 200, mais j'ai besoin de mettre en cache l'image pendant 2 jours et la réponse était 304 .... pourquoi? désolé pour un mauvais anglaisProblème d'en-têtes de cache Apache/PHP

+0

* « La réponse est toujours 200 » * Alors quelle est la question? Sur une note plus sérieuse, n'est pas un ['2xx Success'] (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success) exactement ce que vous attendez? Utilisez-vous un outil pour voir les en-têtes complets? – jensgram

+0

@jensgram je veux un cache 304 ... j'utilise un tamper data dans firefox – Isis

Répondre

1

d'envoyer 304 Vous devez inclure Etag dans vos en-têtes de réponse, etag est quelque chose comme le hachage du contenu lui-même et la date de sa création.

Après avoir inclus etag en réponse le navigateur vous enverra l'en-tête de demande "If-None-Match".

Vous devez comparer les en-têtes et si elles correspondent à répondre à 304, sinon envoyer un nouveau contenu avec de nouveaux en-tête de l'ETAG et de l'état 200.