小樱 发表于 2018/1/4 06:48

kangle cache_control标记强制缓存模块解析 php静态化Cache-Control: static,max-age=60 header头部输出

如果要强制缓存,status_code是匹配模块可以匹配状态码,如果访问过程中出现503,504等错误码也会缓存,所以我们设置这个模块,只缓存可以正常访问的200状态码页面。kangle 3.1才有的功能,3.1以前的版本就不用加这个模块
设置code=200
cache_control模块就是设置强制缓存的了,max_age是缓存时间,last_modified是会增加一个Last-Modified的头,soft就是表示不发送max-age给浏览器,即浏览器不缓存,而只是kangle缓存。否则两边都缓存。
must_revalidate代表每次访问过程,都必须重新验证该缓存文件是否更新,如果无更新,则继续缓存,有更新则刷新缓存并且替换现有缓存文件,如果用于PHP或者远程CDN反代根据你自己需要是否开启(其实感觉没什么用,不推荐开,只会增加访问延迟)。
第二种方式是修改你的程序,送一个Cache-Control的头。Cache-Control有static内容就可以。
下面是php的例子。
<?php      header("Cache-Control: static,max-age=60");    ?>
max-age是指定缓存时间(秒).
看看是否生效,第一次访问是经过php,第二次访问就不用。
可查看access.log访问日志。每条记录的后面[]里面,如果有C表示是从缓存给出的。


测试php代码例如,创建一个1.php文件
<?php
header("Cache-Control: static,max-age=1800");
$xff = getenv('HTTP_X_FORWARDED_FOR');
echo $xff;

小樱 发表于 2018/12/5 15:02

must_revalidate好像是告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。

Expires
缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说, Expires=max-age + 请求时间 ,需要和Last-modified结合使用。但在上面我们提到过,cache-control的优先级更高。 Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

Last-Modified与ETag
Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。
你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag(实体标识)呢?HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:

Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的新鲜度
如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存
有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形
Last-Modified/ETag 与 Cache-Control/Expires
配置Last-Modified/ETag的情况下,浏览器再次访问统一URI的资源,还是会发送请求到服务器询问文件是否已经修改,如果没有,服务器会只发送一个304回给浏览器,告诉浏览器直接从自己本地的缓存取数据;如果修改过那就整个数据重新发给浏览器;
Cache-Control/Expires则不同,如果检测到本地的缓存还是有效的时间范围内,浏览器直接使用本地副本,不会发送任何请求。两者一起使用时,Cache-Control/Expires的优先级要高,即当本地副本根据Cache-Control/Expires发现还在有效期内时,则不会再次发送请求去服务器询问修改时间Last-Modified或实体标识Etag了。
一般情况下,两者会配合一起使用,因为即使服务器设置缓存时间, 当用户点击“刷新”按钮时,浏览器会忽略缓存继续向服务器发送请求,这时Last-Modified/ETag将能够很好利用304,从而减少响应开销。

小樱 发表于 2019/6/4 02:58

最好直接回应控制吧,php就是方便,要缓存的页面引入加载一个文件调用就行了
不标准的,并且还要修改php,相当于锁定了kangle
方案不好
尽量用标准的etag,php可以加etag更好控制缓存,但是缺点就是不能静态化,比如说rss链接
毕竟etag只是个304让浏览器缓存而已。php请求会触发源站cgi
存的只是静态图片等这些内容,php不行

chenyajun 发表于 2019/7/4 09:24

问一下如何缓存页面公共部分,头部和尾部每个页面都是共用的,还有个问题就是我用apache打开我一个网站很快就加载显示一部分页面,然后慢慢显示全,但是kangle要比apache慢好几秒,好像是全部加载完才几百完全显示了,开启了缓存都不行

小樱 发表于 2019/7/4 19:13

chenyajun 发表于 2019/7/4 09:24
问一下如何缓存页面公共部分,头部和尾部每个页面都是共用的,还有个问题就是我用apache打开我一个网站很快 ...

缓存可以参考哔哩哔哩,页面共用缓存,api插入登录等数据
用https2可以有效提高并发数提高页面速度

chenyajun 发表于 2019/7/4 19:52

小樱 发表于 2019/7/4 19:13
缓存可以参考哔哩哔哩,页面共用缓存,api插入登录等数据
用https2可以有效提高并发数提高页面速度

不是很明白,不过还是谢谢了

小樱 发表于 2019/7/4 19:55

chenyajun 发表于 2019/7/4 19:52
不是很明白,不过还是谢谢了

http1.1仅支持4并发,2.0支持64并发
页: [1]
查看完整版本: kangle cache_control标记强制缓存模块解析 php静态化Cache-Control: static,max-age=60 header头部输出