添加这几行代码就可以了:
3.1、Expires
如expires.php
<?php
header('Cache-Control: max-age=86400,must-revalidate');
header('Last-Modified: ' .gmdate('D, d M Y H:i:s') . ' GMT' );
header("Expires: " .gmdate ('D, d M Y H:i:s', time() + '86400′ ). ' GMT');
?>
以上信息表示该文件自请求后24小时后过期。
其他需要处理的动态页面直接调用即可。
3.2、Etag
根据Http返回状态来处理。当返回304直接从缓存中读取
如etag.php
<?php
cache();
echo date("Y-m-d H:i:s");
function cache()
{
$etag = "http://www.jb51.net";
if ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
{
header('Etag:'.$etag,true,304);
exit;
}
else header('Etag:'.$etag);
}
?>
If-Modified-Since是服务器进行判断,而非cgi程序判断,另外If-Modified-Since是上次服务器返回头部中的Last-Modified信息,如果返回的头部中没有Last-Modified,则请求时是不会带上,也就是说Last-Modified / If-Modified-Since是成对使用的。
什么是”Last-Modified”?
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
如果你真的想知道If-Modified-Since的内容,需要在nginx中fastcgi.conf配置
// 请求的头部的所有内容 fastcgi_param REQUEST_HEADER $request;
nginx expires控制页面缓存
http://www.jb51.net/article/33213.htm
Etag和Expires 性能调优
http://www.jb51.net/article/33214.htm
最全的HTTP头部信息分析
http://www.itnose.net/detail/6023525.html
补充:还可以有不同的配置的:/etc/nginx/nginx.conf
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
location / {
{
expires 12h;
}
相关推荐
本文将深入探讨两个关键的缓存机制:Etag与If-None-Match以及Last-Modified与If-Modified-Since。 1. Etag与If-None-Match: Etag(Entity Tag)是一种用于标识资源版本的机制。服务器在响应头中设置Etag,它通常是...
可以设置`"If-Modified-Since"`为`"0"`或`"Cache-Control"`为`"no-cache"`,如下: ```javascript xhr.setRequestHeader("If-Modified-Since", "0"); xhr.setRequestHeader("Cache-Control", "no-cache"); ``` ...
当客户端(浏览器)向服务器请求资源时,如果之前已经获取过该资源,它会在请求中包含一个 `If-Modified-Since` 头,带上上次获取资源时记录的 `Last-Modified` 时间戳。如果服务器发现资源自那时以来未被修改,它会...
然而,当浏览器缓存了文件并再次请求时,如IE和Edge,它们会在后续请求中添加"If-Modified-Since"字段,询问服务器文件是否自上次访问以来有所更改。File Service不支持这种类型的条件请求头,导致请求失败。 对比...
当浏览器再次请求该资源时,它会将上次接收到的Last-Modified值通过`If-Modified-Since`头部发送回服务器,询问服务器资源是否自那时起有变动。如果资源未改变,服务器会返回一个304 Not Modified状态码,告诉浏览器...
修改last-modified的HTTP规范,实现了last-modified , if-modified-since , etag , if-none-match 。概要Modified是根据构建的,并通过缓存支持对其进行修饰,因此,如果您熟悉请求,则几乎可以使用修改了。 var...
协商缓存的字段有 Last-Modified / If-Modified-Since 和 Etag / If-None-Match,其中 Etag / If-None-Match 的优先级比 Last-Modified / If-Modified-Since 高。 Last-Modified 字段,它的值是该资源文件在服务器...
当`If-Modified-Since`的日期与服务器资源的`Last-Modified`相同,服务器可以返回304 Not Modified状态,避免传输整个文件。 7. **性能优化** 使用`Last-Modified`和`ETag`可以显著提升用户体验,减少不必要的网络...
Etag http If-None-Match If-Modified-Since Last-Modified 使用Demo 已经可以直接使用
Node.JS的缓存HTTP客户端 一个Node.JS,它将透明的缓存层添加到http和https客户端。 安装 ...文献资料 ... 只需更改很少的代码即可支持缓存。 ...cachedHttp .... 第一行, require返回一个带有一个参数的构造函数:它
25 If-Modified-Since 26 26 If-None-Match 27 27 If-Range 28 28 If-Unmodified-Since 28 29 Last-Modified 29 30 Location 29 31 Max-Forwards 29 32 Pragma 30 33 Proxy-Authenticate 30 34 Proxy-Authorization ...
强缓存通过这些头部直接决定是否使用缓存,而协商缓存则通过`Last-Modified`/`If-Modified-Since`或`ETag`/`If-None-Match`与服务器通信来验证资源是否更新。Service Worker提供了更细粒度的缓存控制,支持离线应用...
Last-Modified是服务器返回资源的最后修改时间,If-Modified-Since是客户端再次请求时携带的Last-Modified值,用来告诉服务器资源的最后修改时间。Etag是服务器对资源的唯一标识,If-None-Match是客户端请求时携带的...
现在终于找到一个办法啦,就是在 xmlhttp.open 之后发送一个If-Modified-Since头即可, 代码如下xmlhttp.setRequestHeader(‘If-Modified-Since’, ‘0’);xmlHttp.onreadystatechange = stateChanged; xmlHttp.open...
浏览器缓存机制、Expires策略(http1.0)和Cache-control策略(http1.1)、Last-Modified/If-Modified-Since、ETag/If-None-Match
8. "IF-MODIFIED-SINCE"行检查:在浏览器对服务器的HTTP GET请求中,查找是否有指示文件上次修改时间的"IF-MODIFIED-SINCE"行。 9. 服务器响应内容:分析服务器返回的内容,判断其是否明确返回了文件的内容。 10. 第...
第二种方法是通过XMLHttpRequest对象的setRequestHeader方法设置请求头If-Modified-Since的值为0。If-Modified-Since请求头用于指定如果页面自指定时间以来没有被修改过,则不返回页面内容。设置为0表示不管页面是否...
当服务器设置Cache-Control为public,并且客户浏览器发送If-Modified-Since头部时,服务器可以根据Last-Modified响应来决定是否返回200 OK状态码或者304 Not Modified状态码。304状态码可以告诉客户端,内容没有发生...
这个选项允许CDN即使接收到客户端的“no-cache”请求,也能通过If-Modified-Since头来判断是否需要重新获取内容。如果开启此功能,我们就需要在后端程序(例如PHP)中处理If-Modified-Since头,以便正确地控制网页的...
* Request Header Fields:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Expect、From、Host、If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since、Max-...