`

设置If-Modified-Since

阅读更多
<!-- 正文 -->

添加这几行代码就可以了:

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;
        }

 

<!-- 版权 -->
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    http协议-缓存控制:etag If-None-Match / Last-Modified If-Modified-Since

    本文将深入探讨两个关键的缓存机制:Etag与If-None-Match以及Last-Modified与If-Modified-Since。 1. Etag与If-None-Match: Etag(Entity Tag)是一种用于标识资源版本的机制。服务器在响应头中设置Etag,它通常是...

    Ajax 缓存问题,Ajax 缓存问题

    可以设置`"If-Modified-Since"`为`"0"`或`"Cache-Control"`为`"no-cache"`,如下: ```javascript xhr.setRequestHeader("If-Modified-Since", "0"); xhr.setRequestHeader("Cache-Control", "no-cache"); ``` ...

    Caching HTTP Headers, Last-Modified and ETag

    当客户端(浏览器)向服务器请求资源时,如果之前已经获取过该资源,它会在请求中包含一个 `If-Modified-Since` 头,带上上次获取资源时记录的 `Last-Modified` 时间戳。如果服务器发现资源自那时以来未被修改,它会...

    使用IE或Edge浏览器通过SAS访问File文件只能访问一次问题分析-xiaoqiang1

    然而,当浏览器缓存了文件并再次请求时,如IE和Edge,它们会在后续请求中添加"If-Modified-Since"字段,询问服务器文件是否自上次访问以来有所更改。File Service不支持这种类型的条件请求头,导致请求失败。 对比...

    HTTP缓存头Last-Modified和ETag介绍

    当浏览器再次请求该资源时,它会将上次接收到的Last-Modified值通过`If-Modified-Since`头部发送回服务器,询问服务器资源是否自那时起有变动。如果资源未改变,服务器会返回一个304 Not Modified状态码,告诉浏览器...

    node-modified:修改后是一个简单的请求客户端来处理http本地缓存

    修改last-modified的HTTP规范,实现了last-modified , if-modified-since , etag , if-none-match 。概要Modified是根据构建的,并通过缓存支持对其进行修饰,因此,如果您熟悉请求,则几乎可以使用修改了。 var...

    最新大厂前端面试题-笔试题2.doc

    协商缓存的字段有 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`可以显著提升用户体验,减少不必要的网络...

    Http Etag 技术分享

    Etag http If-None-Match If-Modified-Since Last-Modified 使用Demo 已经可以直接使用

    cache-http:节点http的缓存外观,增加了对If-Modified-Since标头的支持

    Node.JS的缓存HTTP客户端 一个Node.JS,它将透明的缓存层添加到http和https客户端。 安装 ...文献资料 ... 只需更改很少的代码即可支持缓存。 ...cachedHttp .... 第一行, require返回一个带有一个参数的构造函数:它

    HTTP协议Header详解.html

    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提供了更细粒度的缓存控制,支持离线应用...

    浏览器的缓存机制1

    Last-Modified是服务器返回资源的最后修改时间,If-Modified-Since是客户端再次请求时携带的Last-Modified值,用来告诉服务器资源的最后修改时间。Etag是服务器对资源的唯一标识,If-None-Match是客户端请求时携带的...

    xmlhttp缓存清除的2种解决方法

    现在终于找到一个办法啦,就是在 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

    41612160郭璐-实验1.doc

    8. "IF-MODIFIED-SINCE"行检查:在浏览器对服务器的HTTP GET请求中,查找是否有指示文件上次修改时间的"IF-MODIFIED-SINCE"行。 9. 服务器响应内容:分析服务器返回的内容,判断其是否明确返回了文件的内容。 10. 第...

    ajax的get请求时缓存处理解决方法

    第二种方法是通过XMLHttpRequest对象的setRequestHeader方法设置请求头If-Modified-Since的值为0。If-Modified-Since请求头用于指定如果页面自指定时间以来没有被修改过,则不返回页面内容。设置为0表示不管页面是否...

    PHP 网页过期时间的控制代码

    当服务器设置Cache-Control为public,并且客户浏览器发送If-Modified-Since头部时,服务器可以根据Last-Modified响应来决定是否返回200 OK状态码或者304 Not Modified状态码。304状态码可以告诉客户端,内容没有发生...

    PHP Squid中可缓存的动态网页设计

    这个选项允许CDN即使接收到客户端的“no-cache”请求,也能通过If-Modified-Since头来判断是否需要重新获取内容。如果开启此功能,我们就需要在后端程序(例如PHP)中处理If-Modified-Since头,以便正确地控制网页的...

    HTTP 请求报头详解

    * 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-...

Global site tag (gtag.js) - Google Analytics