您的位置:首页 > 理论基础 > 计算机网络

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

2013-12-16 11:05 218 查看
一、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然后和脚本放到同一个目录下测试,多刷新几次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐