如何防止浏览器caching的PHP网站

我有一个运行在云端服务器的php站点。当我添加新的文件css,js或者图像时,浏览器正在加载存储在caching中的旧的js,css和图像文件。

我的网站有一个DOCTYPE和meta标签如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)"> <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)"> <meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)"> <meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)"> 

由于上述doctype和元代码,我加载相同的文件caching在浏览器,而不是新的

尝试这个

 <?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); ?> 

在这里,如果你想通过HTML控制它:做如下select1:

 <meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/> <meta http-equiv="pragma" content="no-cache" /> 

如果你想通过PHP控制它:像下面这样做选项2:

 header('Expires: Sun, 01 Jan 2014 00:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache'); 

选项2总是更好,以避免代理caching问题。

你可以试试这个:

  header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Connection: close"); 

希望这将有助于防止caching,如果有的话!

我有caching我的CSS文件的问题。 在PHP中设置标题没有帮助我(可能是因为标题需要在样式表文件中设置,而不是链接到它的页面?)。

我在这个页面上find了解决scheme: https : //css-tricks.com/can-we-prevent-css-caching/

解决scheme:

追加时间戳作为链接文件的URI的查询部分。
(可以用于CSS,JS,图像等)

为了发展:

<link rel="stylesheet" href="style.css?<?php echo date('Ym-d_H:i:s'); ?>">

对于生产(caching主要是一件好事):

<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(并且在需要时手动重写)

或者这两者的结合:

 <?php define( "DEBUGGING", true ); // or false in production enviroment ?> <!-- ... --> <link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date('_Y-m-d_H:i:s') : ""; ?>"> 

编辑:

或者这两个更漂亮的组合:

 <?php // Init define( "DEBUGGING", true ); // or false in production enviroment // Functions function get_cache_prevent_string( $always = false ) { return (DEBUGGING || $always) ? date('_Y-m-d_H:i:s') : ""; } ?> <!-- ... --> <link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>"> 

如果你input谷歌例如:“在线标题检查工具”,那么你会看到:

http://www.webconfs.com/http-header-check.php

不要相信这样的工具! 我可以检查我的浏览器中的标题,但我想我会使用在线工具。 然后我看到“第二个头caching控制”覆盖第一个! 这不会发生与“replace参数”FALSE。

所以首先我想这里的答案是不正确的,但我不能相信,所以在做了更多的testing后,我发现“在线标题检查工具”给出了错误的结果!