gpt4 book ai didi

php - 缓存 css 和 javascript

转载 作者:可可西里 更新时间:2023-10-31 22:15:15 28 4
gpt4 key购买 nike

我在缓存方面遇到问题...

我使用这个带有 url 重写的 php 文件来压缩和缓存 css 和 js

我的印象是,如果我更改/更新了我的一个文件,浏览器将检索更新后的文件。但它不会,除非我清除缓存或刷新页面。

我的编码错了吗?或者浏览器是否应该在缓存有效期到期之前不获取更新的内容?

<?php
$file = $_SERVER['DOCUMENT_ROOT'].'/'.$_GET['file'];
$last_modified_time = filemtime($file);
$etag = md5_file($file);
$expires = 60*60*24*7;

if(file_exists($file))
{
if($_SERVER['HTTP_IF_NONE_MATCH'] != $etag)
{
header("Pragma: public");
header("Cache-Control: maxage=$expires, must-revalidate");
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");
header("Etag: \"{$etag}\"");

if($_GET['type'] == 'js') header('Content-type: application/javascript');
if($_GET['type'] == 'css') header('Content-type: text/css');
if($_GET['type'] == 'ico') header('Content-type: image/x-icon');

ob_start("ob_gzhandler");
include($file);
}
else {

header('HTTP/1.0 304 Not Modified');
}
}
else {

header("HTTP/1.0 404 Not Found");
}
?>

重写规则

RewriteRule ^(.*).js$ /compress.php?file=$1.js&type=js [L,QSA]
RewriteRule ^(.*).css$ /compress.php?file=$1.css&type=css [L,QSA]
RewriteRule ^(.*).ico$ /compress.php?file=$1.ico&type=ico [L,QSA]

------------

编辑:也许我应该用不同的方式来做这件事?大公司用什么缓存,怎么强制浏览器在设置缓存过期前获取更新的内容?

编辑 2:谢谢大家的帮助。我要使用 1 小时缓存

最佳答案

在给定的 Expires header 过期之前,浏览器不会刷新缓存的文件。如果它已过期,它将请求带有 If-None-Match header 的文件(我猜)。

但是为什么不通过 .htaccess 来处理缓存控制?你可以查看 mod_expires :

# Expires-Header
ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"

# ETag
FileETag All

Gzip 压缩以及 mod_deflate :

AddOutputFilterByType DEFLATE text/css application/javascript

编辑:“大公司”不使用 Expiresmax-age header ,否则他们将设置这些 header 以让缓存文件约 1 小时 ->与缓存的冲突将被最小化。您将其设置为 1 周。

关于php - 缓存 css 和 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932834/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com