文档章节

设置If-Modified-Since

阿锋zxf
 阿锋zxf
发布于 2016/07/06 08:43
字数 594
阅读 18
收藏 0

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

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

 

© 著作权归作者所有

阿锋zxf
粉丝 8
博文 181
码字总数 186512
作品 0
深圳
程序员
私信 提问
浏览器缓存和webpack缓存配置

浏览器缓存 浏览器缓存分为两种类型: 强缓存:也称为本地缓存,不向服务器发送请求,直接使用客户端本地缓存数据 协商缓存:也称304缓存,向服务器发送请求,由服务器判断请求文件是否发生改...

辉卫无敌
2018/07/05
0
0
vue SPA项目,浏览器和nginx反向代理缓存问题解决实方案

问题背景 a.浏览器端在每次发布新的版本时候,总会出现因为SPA项目中index.html文件和服务端版本不一致的问题,导致用户不能及时更新,需要通过手动刷新来强制从服务端更新文件。 b.补充一下...

trsoliu
2018/12/10
0
0
http响应Last-Modified和ETag以及Apache和Nginx中的配置

基础知识 1) 什么是”Last-Modified”? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时...

晨曦之光
2012/03/09
1K
0
http header头设置反向代理不缓存

一:概念说明 Expries:网页的cache过期时间,到指定日期网页cache失效 Last-Modified:网页的最新更新时间 Cache-Control 缓存控制 no-cache:不缓存网页 no-store:不缓存网页,如果有则删除之...

晨曦之光
2012/03/09
831
0
实操 Web Cache (第二版)

实操 Web Cache http://netkiller.github.io/journal/cache.html Mr. Neo Chen (陈景峰), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 298......

netkiller-
2015/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

跨域的理解,以及解决方案!

/*什么是跨域? * 跨域的主要原因是浏览器的同源策略。 * =>>所谓的同源策略就是A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。 * 什么是同源? * =>>同源就是协议相同、域名相同...

流年那么伤
8分钟前
1
0
Nginx配置try_fiels,php无法获取$_GET参数

平时开发都是用LNMP,新安装的虚拟机在配置nginx的rewrite的时候使用try_files命令。但是在写的时候配置成“try_files $uri $uri/ /index.php?q=args;”, 在PHP的web程序中,打印$_GET为空。...

叫我哀木涕
8分钟前
0
0
【原创】Microsoft Edge可以用localhost访问但无法用IP访问

Microsoft Edge可以用localhost和127.0.0.1访问但无法用本机IP访问, chrome ie都可以推测是edge的问题,网络是专用网络,防火墙也关了: 在edge里 按F12 以在控制台里看到这句 CONSOLE21301...

shzwork
9分钟前
0
0
Python利用数学方程式画4种不一样的心型图案

前言 下面这四个心型图案,是通过科学地计算,根据数学方程式生成的,虽然做的不是特别完美,但是基本的还是能实现的 第一个心型 结果图 第二心型 结果图 学习从来不是一个人的事情,要有个相互监...

A_裙232550246
9分钟前
0
0
微信带场景参数的二维码生成与使用?

微信公众号推广时,用户通过扫二维码关注公众号,需要统计用户是通过谁的二维码进行关注。 在用户扫码关注公众号时,二维码带上推广者的参数,在关注公众号后,获取到该推广者的参数。 目前有...

wxgzhgncj
9分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部