利用Apache mod_expires 与 mod_headers 实现文件缓存及mod_deflate压缩输出

2023-05-16

1.使用mod_deflate module 压缩输出(启动gzip)


开启mod_deflate

sudo a2enmod deflate
sudo /etc/init.d/apache2 restart
在httpd.conf中添加

<IfModule mod_deflate.c>
#单独设置需要压缩的类型
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
如默认所有输出都需要压缩,只排除部分。

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE #插入过滤器,gzip所有输出

#设置不压缩的类型
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</IfModule>


2.利用Apache mod_expires 与 mod_headers 实现文件缓存


开启 mod_expiresmod_headers

sudo a2enmod expires
sudo a2enmod headers
sudo /etc/init.d/apache2 restart
利用mod_expires,在httpd.conf中添加

<IfModule mod_expires.c>
ExpiresActive on #开启
ExpiresDefault A300 #默认
ExpiresByType text/html A300
ExpiresByType text/css A2592000 # 30天
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType application/x-javascript A2592000
</IfModule>
利用mod_headers,在httpd.conf中添加

<IfModule mod_headers.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=18000, public, must-revalidate"
</FilesMatch>
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=3600, must-revalidate"
</FilesMatch>
</IfModule>


3.Cache-Control说明:


网页的缓存是由 HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must- revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:


(1) 打开新窗口
    值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。
    而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
    Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)

(2) 在地址栏回车
    值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。
    值为no-cache,那么每次都会访问。
    值为max-age,则在过期之前不会重复访问。

(3) 按后退按扭
    值为private、must-revalidate、max-age,则不会重访问,
    值为no-cache,则每次都重复访问

(4) 按刷新按扭
    无论为何值,都会重复访问

Cache-Control(常规标头,HTTP1.1)

.public:(仅为响应标头)    
        响应:告知任何途径的缓存者,可以无条件的缓存该响应.
.private(仅为响应标头)    
响应:告知缓存者(据我所知,是指用户代理,常见浏览器的本地缓存.用户也是指,系统用户.但也许,不应排除,某些网关,可以识别每个终端用户的情况),只针对单个用户缓存响应. 且可以具体指定某个字段.如private –“username”,则响应头中,名为username的标头内容,不会被共享缓存.
.no-cache:    
        请求: 告知缓存者,必须原原本本的转发原始请求,并告知任何缓存者,别直接拿你缓存的副本,糊弄人.你需要去转发我的请求,并验证你的缓存(如果有的话).对应名词:端对端重载.    
        响应: 允许缓存者缓存副本.那么其实际价值是,总是强制缓存者,校验缓存的新鲜度.一旦确认新鲜,则可以使用缓存副本作为响应. no-cache,还可以指定某个包含字段,比如一个典型应用,no-cache=Set-Cookie. 这样做的结果,就是告知缓存者,对于Set-Cookie字段,你不要使用缓存内容.而是使用新滴.其他内容则可以使用缓存.
.no-store:    
        请求:告知,请求和响应都禁止被缓存.(也许是出于隐私考虑)    
        响应:同上.
.max-age:    
        请求:强制响应缓存者,根据该值,校验新鲜性.即与自身的Age值,与请求时间做比较.如果超出max-age值,则强制去服务器端验证.以确保返回一个新鲜的响应.其功能本质上与传统的Expires类似,但区别在于Expires是根据某个特定日期值做比较.一但缓存者自身的时间不准确.则结果可能就是错误的.而max-age,显然无此问题. Max-age的优先级也是高于Expires的.
        响应:同上类似,只不过发出方不一样.
.max-stale:    
        请求:意思是,我允许缓存者,发送一个,过期不超过指定秒数的,陈旧的缓存.    
        响应:同上.
.must-revalidate(仅为响应标头)    
        响应:意思是,如果缓存过了新鲜期,则必须重新验证.而不是试图返回一个不在新鲜期的缓存.与no-cache的区别在于,no-cache,完全无视新鲜期的概念.总是强制重新验证.理论上,must-revalidate更节省流量,但相比no-cache,可能并不总是那么精准.因为即使缓存者,认为是新鲜的,也不能保证服务器端没有做过更新.如果缓存者是一个缓存代理服务器,如果其试图重新验证时,无法连接上原始服务器,则也不允许返回一个不新鲜的,缓存中的副本.而是必须返回一个504 Gateway timeout.
.proxy-revalidate(仅为响应标头)    
        响应:限制上与must-revalidate类似.区别在于受体的范围.proxy-revalidate,是要排除掉用户代理的缓存的.即,其规则并不应用于用户代理的本地缓存上.
.min-fresh(仅为请求标头)    
        请求:告知缓存者,如果当前时间加上min-fresh的值,超了该缓存的过期时间.则要给我一个新的.其实个人觉得,其功能上有点和max-age类似.但是更大的是语义上的区别.
.only-if-cached:(仅为请求标头)    
        请求:告知缓存者,我希望内容来自缓存,我并不关心被缓存响应,是否是新鲜的.
.s-maxage(仅为响应标头)    
        响应:与max-age的唯一区别是,s-maxage仅仅应用于共享缓存.而不引用于用户代理的本地缓存,等针对单用户的缓存. 另外,s-maxage的优先级要高于max-age..cache-extension (cache-extension是一个泛化的代称.它指所有自定义,或者说扩展的,指令,客户端和服务器端都可以自定义扩展Cache-Control相关的指令.)    那么,实际上我们可以这样 Cache-Control:max-age=300, custom-directive = xxx, public. 这样我们就定义了一个被统称为cache-extension的扩展指令.该指令如果对应的客户端或服务器端,不认识,就会忽略掉.
.no-transform     
        请求:告知代理,不要更改媒体类型,比如jpg,被你改成png.    
        响应:同上.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用Apache mod_expires 与 mod_headers 实现文件缓存及mod_deflate压缩输出 的相关文章

  • php生成QRcode

    lt php ini set 39 display errors 39 39 on 39 PNG TEMP DIR 61 dirname FILE DIRECTORY SEPARATOR 39 temp 39 DIRECTORY SEPAR
  • C语言--函数

    C语言中include头文件的语法 xff1a include lt stdio h gt xff0c 先从系统include文件中寻找 xff0c 再去项目include中寻找 xff1b include 34 my h 34 xff0c
  • JS获取CSS属性值

    lt DOCTYPE HTML PUBLIC 34 W3C DTD HTML 4 01 Transitional EN 34 34 http www w3 org TR html4 loose dtd 34 gt lt html gt lt
  • JS判断碰撞方法

    JS判断碰撞方法 判断是否碰撞 64 param obj 原对象 64 param dobj 目标对象 function impact obj dobj var o 61 x getDefaultStyle obj 39 left 39 y
  • PHP字符串比较

    我们在代码中用的最多的逻辑是什么 你知道如下的几段代码的布尔结果分别是什么么 var dump 34 1 34 61 61 34 1e0 34 var dump 34 1 34 61 61 34 0x1 34 var dump 34 20
  • 播放音乐方法(兼容IE FF Chrome Opera Safari)

    音乐播放器 64 param obj 播放器id 64 param file 音频文件 mp3 ogg 64 param loop 是否循环 function audioplayer id file loop var audioplayer
  • PHP AES256加密算法

    aes class php lt php AES implementation in PHP c Chris Veness 2005 2011 Right of free use is granted for all commercial
  • javascript var 重要性

    javascript 的 var 作用是声明变量 一般情况下不写都不会出错 xff0c 但有些情况如果不写 xff0c 会有不同的结果 lt div id 61 34 a 34 gt lt div gt lt script type 61
  • mysql判斷字段是否存在方法

    1 desc 命令 格式 desc tablename columnname 例子 desc 96 table 96 96 mid 96 desc 96 table 96 39 abc 39 2 show columns 命令 格式 sho
  • php 发送带附件邮件

    emailclass php lt class CMailFile var subject var addr to var text body var text encoded var mime headers var mime bound
  • ubuntu系统使用命令

    1 复位面板 打开终端 xff0c 终端窗口打开之后 xff0c 立即在提示符后面输入下列命令 gconftool recursive unset apps panel rm rf gconf apps panel pkill gnome
  • Windows安装Anaconda并且配置国内镜像教程

    前言 我们在学习 Python 的时候需要不同的 Python 版本 xff0c 关系到电脑环境变量配置换来换去很是麻烦 xff0c 所以这个时候我们需要一个虚拟的 Python 环境变量 xff0c 我之前也装过 virtualenv v
  • linux常用命令

    1 ls 显示目录文件夹及文件 使用方式 ls lt a 显示目录下所有文件及文件夹包括 与 A 显示目录下所有文件及文件夹不包括 与 l 显示目录下所有文件及文件夹详细信息 t 按修改时间排序 倒序 F 如目录后加 如可执行文件后加 r
  • shell语法

    1 数组 定义数组 array 61 34 163 34 34 21cn 34 34 sina 34 34 qq 34 获取数组长度 echo array 遍历数组 for arr in array do echo arr done 2 转
  • php 替换敏感字符串

    StrFilter class php lt php string filter class Date 2013 01 09 Author fdipzone Ver v1 0 Func public replace 替换非法字符 publi
  • php返回数据格式化类

    DataReturn class php lt php 返回數據格式化類 Date 2011 08 15 Author fdipzone class DataReturn class start private type private x
  • 强制更新图片缓存

    強制更新圖片緩存 64 param Array files 要更新的圖片 64 param int version 版本 function force reload file files 61 array version 61 0 html
  • php XML文件解释类

    XMLParser class php lt php XML 文件分析类 Date 2013 02 01 Author fdipzone Ver 1 0 func loadXmlFile xmlfile 读入xml文件输出Array loa
  • php CSS Update Class

    CSSUpdate class php lt php css 更新类 更新css文件内图片的版本 Date 2013 02 05 Author fdipzone Ver 1 1 Func update Ver 1 1 增加search ch
  • sh cssupdate

    shell sh 更新 css图片版本 bin bash csstmpl path 61 34 home fdipzone php csstmpl 34 css path 61 34 home fdipzone php css 34 rep

随机推荐

  • JS小游戏-宇宙战机

    游戏介绍 业余时间写的一个飞行射击游戏 xff0c 纵向 xff0c 共六关 游戏需求 1 战机可发射子弹 xff0c 子弹可通过获取道具升级 2 战机可放bomb xff0c 可获取道具增加数量 3 战机可蓄力攻击 4 道具有三种 xff
  • php __call 与 __callStatic

    php 5 3 后新增了 call 与 callStatic 魔法方法 call 当要调用的方法不存在或权限不足时 xff0c 会自动调用 call 方法 callStatic 当调用的静态方法不存在或权限不足时 xff0c 会自动调用 c
  • $CF1153A\ Serval\ and\ Bus$

    看大佬的代码都好复杂 xff08 不愧是大佬 orz 蒟蒻提供一种思路 因为求的是最近的车对吧 qwq 所以我们可以用一个 while 循环所以没必要去用什么 for 至于这是 div2 的第一题还是比较水的 code include lt
  • Sublime Text配置JDK

    操作系统 xff1a Windows 7 SP1 Sublime Text是一款轻量级代码编辑器 虽然收费 xff0c 但可以无限期试用 支持多种语言的代码高亮 xff0c 但一些不能直接编译运行 xff0c 今天我为大家带来Sublime
  • JS小游戏-仙剑翻牌

    游戏介绍 这是一个翻牌配对游戏 xff0c 共十关 1 游戏随机从42张牌中抽取9张进行游戏 xff0c 每组为2张相同的牌 xff0c 共18张牌 2 连续翻到两张相同的为胜利 xff0c 当9组全部翻到则过关 如不是翻到连续两张相同的
  • memcached 常用命令及使用说明

    memcached 查看方法 格式 telnet ip port 例如 telnet localhost 11211 退出命令 xff1a quit 一 存储命令 存储命令格式 xff1a lt command name gt lt key
  • PHPMailer - PHP email transport class

    在服务器安装 sendmail sudo apt get install sendmail 启动 sendmail sudo etc init d sendmail start 修改 php ini mail function SMTP 6
  • PHP 遍历文件夹及文件类及处理类

    FindFile class php 用于遍历目录文件 lt php 遍历文件夹及文件类 Date 2013 03 21 Author fdipzone Ver 1 0 class FindFile public files 61 arra
  • sh autolog backup

    shell sh 每天备份log文件 bin bash 每天备份log文件 log path 61 34 home fdipzone logs 34 log目录 backup path 61 34 home fdipzone logs ba
  • Apache rewrite

    1 开启rewrite sudo a2enmod rewrite 2 停用rewrite sudo a2dismod rewrite 3 服务器环境变量 Apache提供给rewirte模块的环境变量大概分成5个类型 第一部分 HTTP h
  • RewriteCond和13个mod_rewrite应用举例Apache伪静态

    1 xff0e 给子域名加www标记 RewriteCond HTTP HOST a z 43 example com NC RewriteCond HTTP HOST www NC RewriteRule http www xample
  • 正向代理与反向代理的区别

    正向代理的概念 正向代理 也就是传说中的代理 他的工作原理就像一个跳板 简单的说 我是一个用户 我访问不了某网站 但是我能访问一个代理服务器 这个代理服务器呢 他能访问那个我不能访问的网站 于是我先连上代理服务器 告诉他我需要那个无法访问网
  • Apache 搭建虚拟主机

    Apache 搭建虚拟主机方法 DocumentRoot xff1a home fdipzone sites demo fdipzone com ServerName xff1a demo fdipzone com 1 进入apache虚拟
  • sh memcached 进程启动及监控

    memcached 进程启动及监控 1 memcached inc sh 设置路径 xff0c 端口等讯息 bin sh config include HOST 61 hostname SITE 61 34 mysite 34 PORT 6
  • 设置进程的显示名称

    有时候在LINUX下 xff0c fork子进程的时候 xff0c 像nginx里的一样 xff0c 想让子进程的名字可以自定义 参考网上文章之后 xff0c 可以通过修改argv 0 的值来改变子进程的名字 xff0c 但是要注意新标题的
  • 自动登入google play下载app report

    流程 1 登入google play 登入google play需要三步 https play google com apps publish https accounts google com ServiceLogin hl 61 en
  • sh cssupdate 优化

    bin bash 更新css文件内图片的版本 如background url 39 images test jpg 39 更新为 background url 39 images test jpg 20130330121210 39 css
  • php click captcha 验证码类

    需求 xff1a 现在常用的表单验证码大部分都是要用户输入为主 xff0c 但这样对手机用户会不方便 如果手机用户访问 xff0c 可以不用输入 xff0c 而是click某一位置便可确认验证码 xff0c 这样就会方便很多 原理 xff1
  • 快速排序算法

    快速排序 xff1a 代码 xff1a lt php 快速排序算法 1 在数组中找一个元素作为key 一般取数组第一个元素作为key 2 i 61 0 j 61 数组长度 1 3 j 当 arr j lt key arr i 与arr j
  • 利用Apache mod_expires 与 mod_headers 实现文件缓存及mod_deflate压缩输出

    1 使用mod deflate module 压缩输出 启动gzip 开启mod deflate sudo a2enmod deflate sudo etc init d apache2 restart 在httpd conf中添加 lt