Cache-Control:no-store, no-cache, must-revalidate
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control:no-store, no-cache, no-transform, no-siteapp, must-revalidate
为了客户端缓存文件,在PHP中使用header('Cache-Control: ....')发送头信息,却发现无论怎么使用header(),每次得到的请求头都是
Cache-Control:no-store, no-cache, must-revalidate
Expires:Thu, 19 Nov 1981 08:52:00 GMT
请求头可以用get_headers($url, 1)来查看,其中$url是要请求的网页链接。
如果说Cache-Control变成no-store, no-cache, must-revalidate还可以理解,那么Expires:Thu, 19 Nov 1981 08:52:00 GMT这个日期又是从哪里来的呢??
实际上这两个头信息是php session模块里面发送的,是PHP程序源代码中写死的代码。调用session_start()以后,会自动发送这两个头信息。
要想改变php的这种行为,可以通过配置php.ini中的session.cache_limiter实现,也可以在php脚本中通过session_cache_limiter('none'),或者调用ini_set('session.cache_limiter', 'none')来改变该配置项的值,如果不是修改php.ini改变session_cache_limiter的值,则需要在调用session_start()之前通过脚本修改session.cache_limiter的值。
如果将session.cache_limiter设置为none, php不会发送任何禁止缓存的头信息,你需要自己在php脚本中使用header()发送头信息来禁止缓存。
session.cache_limiter的值可以为public private_no_expire private nocache,其中noncache是默认值,具体参数代表的意义可以查看PHP手册。
- <?php
- ini_set('session.cache_limiter', 'none');
- session_start();
- header('Pragma: no-cache');
- header('Expires: ' . gmDate('D, d M Y H:i:s') . ' GMT');
- header('Cache-Control: no-store, no-cache, must-revalidate, no-transform, no-siteapp');
- ?>
复制代码 以下代码是PHP源代码摘录,不是PHP脚本代码。
- CACHE_LIMITER_FUNC(nocache) /* {{{ */
- {
- ADD_HEADER("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
-
- /* For HTTP/1.1 conforming clients and the rest (MSIE 5) */
- ADD_HEADER("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
-
- /* For HTTP/1.0 conforming clients */
- ADD_HEADER("Pragma: no-cache");
- }
复制代码 |
|