Apache / PHP缓存头问题

时间:2010-11-08 11:43:22

标签: php apache caching header

<?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 ....为什么? 抱歉英文不好

1 个答案:

答案 0 :(得分:1)

发送304您需要在响应标头中包含Etag,etag就像内容的哈希本身及其创建日期。

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

你必须比较这些标题,如果它们匹配,则回复304,如果没有发送带有新Etag标题和状态200的新内容。