php的304方式
一般浏览器请求php是不会被缓存的,除非php直接显示的发送head 304
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$browserCachedCopyTimestamp = strtotime(preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']));
if($browserCachedCopyTimestamp + 604800 > time()){
header("http/1.1 304 Not Modified");
header ("Expires: " . gmdate ("r", (time() + 604800)));
header ("Cache-Control: max-age=604800");
exit;
}
}
$id=I('get.id',0,'intval');
$file = UPLOAD_IMG_PATH . 'qccode/' . $id . '.png';
if(file_exists($file)){
header ("Last-Modified: " . gmdate ('r', time()));
header ("Expires: " . gmdate ("r", (time() + 604800)));
header ("Cache-Control: max-age=604800");
header ("Pragma: public");
Header ("Content-type: image/png");
echo file_get_contents($file);
}else{
$qr = \APPlib\get_app_lib('phpqrcode',false);
$site = C('SITE_URL');
$value=$site . $id . '.html';
$errorCorrectionLevel = "L";
$matrixPointSize = "4.5";
\QRcode::png($value, $file, $errorCorrectionLevel, $matrixPointSize);
echo file_get_contents($file);
}
上面就是通过304来缓存一个动态的js,根据文件的修改时间来判断,这里需要注意一点,如果再次之前有session_start,要注意session_cache_limiter,他会发送一个不缓存的头信息。
这种情况需要可以强制发送一个program public的头来规避,注意在发送304的时候最好还是补充一下缓存头,我在缓存js时可以不在重设,可能是由于我是通过服务器重定向模拟的动态js吧(请求路径是js,但是是动态生成的)。
php的304方式的更多相关文章
- 细说ASP.NET Core静态文件的缓存方式
一.前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存.服务器缓存.CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的. 本文指在这三个方面,在ASP.NET ...
- 预加载 img 的方式。
原生方式: var img = new Image(); img.onerror = function() { alert('img error'); }; img.onload = function ...
- 修复发生“由于数据移动,未能继续以 NOLOCK 方式扫描”错误的数据库
最近在系统运行中发现了一个错误,错误信息如下: 错误信息:查询A201412C20568单证信息错误 ---> System.Data.OleDb.OleDbException: 由于数据移动, ...
- Spring学习总结(一)——Spring实现IoC的多种方式
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...
- 恶意软件/BOT/C2隐蔽上线方式研究
catalogue . 传统木马上线方式 . 新型木马上线方式 . QQ昵称上线 . QQ空间资料上线 . 第三方域名上线 . UDP/TCP二阶段混合上线 . Gmail CNC . NetBot两 ...
- [web] 200 OK (from cache) 与 304 Not Modified
为什么有的缓存是 200 OK (from cache),有的缓存是 304 Not Modified 呢?很简单,看运维是否移除了 Entity Tag.移除了,就总是 200 OK (from c ...
- HTTP协议请求方式: 中GET、POST和HEAD的介绍以及错误提示码
HTTP协议中GET.POST和HEAD的介绍 2008-05-10 14:15 GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档 ...
- NET Core静态文件的缓存方式
NET Core静态文件的缓存方式 阅读目录 一.前言 二.StaticFileMiddleware 三.ASP.NET Core与CDN? 四.写在最后 回到目录 一.前言 我们在优化Web服务的时 ...
- cocos2d-x 2.0.3 设置高清模式注意事项(已移除-hd方式)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=304 在cocos2d-x 2. ...
随机推荐
- mongodb 问题
启动mongodb时,提示Unclean shutdown detected mongodb,解决方法很简单 mongod --repair --dbpath D:\MongoDB\blog 不用 ...
- CNN的学习笔记
1.卷积核的概念,卷积核的size,就是滑动窗口的大小,例如原始数据为28*28的手写数字,滑动窗口size为5*5,则卷积核的size为5*5.卷积核就是权重集合,就是5*5+1.1表示偏置项.卷积 ...
- Index--过滤索引和参数化
--============================================ 领导指点我去给某台数据库调优下,结果屁颠屁颠地干完,还自我感觉良好,刚刚别人博客时,才发现自己踩坑了!! ...
- [C#学习笔记]类型对象指针和同步块索引
写在前面 看<CLR via C#>第四章时,看到了类型对象指针和同步块索引这两个概念,不知如何解释,查看过相关资料之后,在此记录. 类型对象指针 <CLR via C#>中的 ...
- 【CronExpression表达式详解和案例】(转载)
原文地址:https://www.cnblogs.com/pipi-changing/p/5697481.html 找了下Cron的资料,这篇作者写的比较清晰,转载记录一下,方便后面使用的时候在g ...
- 前端分享----JS异步编程+ES6箭头函数
前端分享----JS异步编程+ES6箭头函数 ##概述Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只 ...
- python 发qq邮件
import smtplibfrom email.mime.text import MIMETextmsg_from = '979477675@qq.com' # 发送方邮箱passwd = 'irg ...
- S11 day 94 RestFramework 之 APIView视图
VIEW视图(Django自带的) 1. url url(r'login/$', views.login.as_view()), 2.点开 as_view() , as_view()为类方法. l ...
- C# __arglist 关键字
using System.Runtime.InteropServices; namespace Alpha { class Beta { [DllImport("msvcrt.dll&quo ...
- jzoj4419
GFS打算去郊外建所别墅,享受生活,于是他耗费巨资买下了一块风水宝地,但令他震惊的是,一群DSJ对GFS的富贵生活深恶痛绝,决定打洞以搞破坏. 现在我们简化一下这个问题,在这片土地上会按顺序发生一系列 ...