有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304了。

我们可以利用php中的 HTTP_IF_MODIFIED_SINCE 结合etag来干这事。Etag没有明确规定的格式,我们可以用文件修改时间的md5值,代码如下:

private function _addEtag($file) {
$last_modified_time = filemtime($file);
$etag = md5_file($file);
// always send headers
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");
header("Etag: $etag");
// exit if not modified
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time ||
@trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
header("HTTP/1.1 304 Not Modified");
exit;
}
}

上面那段代码有时不太好使,有下面这段:

private function _addEtag($file) {
$last_modified_time = filemtime($file);
$gmt_mtime = gmdate('r', $last_modified_time);
header('ETag: "'.md5($last_modified_time.$file).'"');
header('Last-Modified: '.$gmt_mtime);
header('Cache-Control: public'); if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime || str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5($last_modified_time.$file)) {
header('HTTP/1.1 304 Not Modified');
exit();
}
}
}

在代码中可以在静态文件(如图片)输出之前调用即可。

php静态文件返回304的更多相关文章

  1. ASP.NET MVC请求特殊静态文件返回404 Not Found

    今天在请求静态的json档案以及woff2档案,会返回404错误,需要在Web.Config里修改: <system.webServer> <modules> <remo ...

  2. [转]网站优化-IIS7下静态文件的优化

    本文转自:http://www.cnblogs.com/Leung/archive/2009/10/26/1590256.html 在网站开发过程中,通常我们会对网站的静态文件做处事,像图片文件,CS ...

  3. ASP.NET Core使用静态文件、目录游览与MIME类型管理

    前言 今天我们来了解了解ASP.NET Core中的静态文件的处理方式. 以前我们寄宿在IIS中的时候,很多静态文件的过滤 和相关的安全措施 都已经帮我们处理好了. ASP.NET Core则不同,因 ...

  4. docker应用栈实践-nginx处理静态文件

    在我的djangoweb应用在docker搭建好之后,发现一些css静态文件返回没有content-type属性,导致浏览器log一堆警告,强迫症的我受不了这一情况 目前的应用栈结构图: 一共四个容器 ...

  5. 06 返回静态文件的映射(函数/多线程)web框架

    06 返回静态文件的映射(函数/多线程)web框架 服务器server端python程序(函数版): import socket server = socket.socket() server.bin ...

  6. 05 返回静态文件的多线程web框架

    05 返回静态文件的多线程web框架 服务器server端python程序(多线程版): import socket from threading import Thread,currentThrea ...

  7. 04 返回静态文件的函数web框架

    04 返回静态文件的函数web框架 服务器server端python程序(函数版): import socket server = socket.socket() server.bind((" ...

  8. 03 返回静态文件的高级web框架

    03 返回静态文件的高级web框架 服务器server端python程序(高级版): import socket server=socket.socket() server.bind(("1 ...

  9. Spring MVC 中请求返回之后的页面没法加载css、js等静态文件

    1.是否被拦截,这个在Web.xml配置中servlet拦截是“/”,如果是则 a.使用spring MVC 的静态资源文件 <!-- 静态文件访问,主要是针对DispatcherServlet ...

随机推荐

  1. mysql在控制台里出现中文问号问题

    由于重装了wampserver,之前遇到的问题统统会重新出现,那么今天遇到的是在mysql控制台中,在表里输入中文数据,却出现问号的问题: 那么这个就跟编码有关系了,那么,我们就去wampserver ...

  2. IIS7.5如何限制某UserAgent 禁止访问

    参见Blocking Bots Based on User-Agenthttp://moz.com/ugc/blocking-bots-based-on-useragent http://server ...

  3. CentOS 5.6怎么安装MongoDB数据库?

    1. 下载Linux版本的 MongoDB 数据库 到官方的下载页面下载mongodb的Linux版本,32位还是64位根据自己的情况自行选择 http://www.mongodb.org/downl ...

  4. asp .net core 中间件的简单 使用

    在startup 的cs文件中 2.捕获异常的中间件 可以在浏览器中 显示异常信息 在开发环境的境况下,该中间件会帮你 捕获异常

  5. jQuery序列化表单为JSON对象

    <form id="myform"> <table> <tr> <td>姓名:</td> <td> < ...

  6. OC#import和#include的异同

    1.#import和#include相同1.1都可以用在OC程序中起到导入文件的作用1.2同样的 包含系统文件都是<>,是包本地文件都用""例如:系统文件#import ...

  7. C#浏览器中在线操作文档

    源码地址:https://github.com/SeaLee02/FunctionModule   文件夹 UploadFiles/WebDemo/COM/OnlineEdit.aspx 就是源码 用 ...

  8. iOS内存区域部分内容

    目前参考这里: https://www.zhihu.com/question/263823072/answer/273452932 以后整理相关的代码问题. 更多参考资料: https://stack ...

  9. Javascript入门笔记1-script标签

    1.script标签在HTML文件中添加JavaScript代码. JavaScript代码只能写在HTML文件中吗?当然不是,我们可以把HTML文件和JS代码分开,并单独创建一个JavaScript ...

  10. 写给iOS小白的MVVM教程(序)

    这几天,需要重构下部分代码,这里简要记录下.但是涉及的技术要点还是很多,所以分为多个篇章叙述.此教程来源于,并将于应用于实践,不做过多的概念性阐释和争论.每个篇章都会附上实际的可执行的代码.因涉及的技 ...