http-headers服务器返回的首部错误码304

来源:互联网 发布:淘宝质量检测正规吗 编辑:程序博客网 时间:2024/05/22 10:49

一、304定义

Not Modiied,意即:客户端可以通过所包含的请求首部,使其请求变成有条件的。如果客户端发起了一个有条件的GET请求,而最近资源未被修改过的话,就可以用这个状态码来说明资源未被修改。带有这个状态码的响应不应该包含主体部分。

我们要巧妙理解这这个定义,这相当于客户端和服务器端的一个条件约束,你问我要东西,我给你东西,并且我返回给你一个条件标识,(如果你发现这个标识,请你在本地缓存一下你刚才要的资源)下一次你再问我要的时候请也带着这个标识过来,我服务器端发现你带了这个标识,并且用它来检测你要的资源是否在间隔时间内有变动,如果没有变动,我直接就返回给你304,告诉你我这里没变,你直接取自己的缓存好了。这样我就没有必要把资源实体返回给你,大大节省了网络资源。

那么我们就可以用304来做一个请求图片的例子:

<?php    $fn = './test.jpg';    $headers = apache_request_headers();    if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) == filemtime($fn))) {        // Client's cache IS current, so we just respond '304 Not Modified'.        header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($fn)).' GMT', true, 304);    } else {        // Image not cached or cache outdated, we respond '200 OK' and output the image.        header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($fn)).' GMT', true, 200);        header('Content-Length: '.filesize($fn));        header('Content-Type: image/png');        print file_get_contents($fn);    }

大家可以随便自己下载一个jpg的图片,然后重命名成test.jpg然后和脚本放到同一个目录下测试,多刷新几次。

0 0