2010-11-08 97 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); 
      } 
     } 
    } 

响应总是200,但我需要将图像缓存2天,响应为304 ....为什么? 对不起,因为英文不好Apache/PHP缓存头问题

+0

*“答案永远是200” *那么是什么问题?更严重的一点是,它不是[2xx成功](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success)。您是否使用工具查看完整标题? – jensgram 2010-11-08 11:45:25

+0

@jensgram我想要一个304缓存...我在Firefox中使用篡改数据 – Isis 2010-11-08 11:51:35

回答

1

发送304你需要在你的响应标题中包含Etag,etag类似于内容本身的散列和它的创建日期。

当您在响应中包含etag后,浏览器会向您发送请求标题“If-None-Match”。

你要比较这头,如果他们匹配304作出回应,如果没有新的ETag头和状态发送新的内容200