php怎么设置浏览器缓存
时间 : 2023-03-26 11:37:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在PHP中,可以通过设置http响应头来控制浏览器缓存。浏览器缓存可以让网站加载速度更快,提高用户体验。下面介绍一下常见的浏览器缓存设置。

一、禁用浏览器缓存

禁用浏览器缓存是个通用方法,可以让浏览器始终从服务器获取最新的资源。这种设置适用于某些不需要缓存的动态页面。

以下是禁用浏览器缓存的方法:

header('Expires: Mon, 26 Jul 1997 05: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');

二、设置文件过期时间

可以通过设置文件过期时间,让浏览器缓存一段时间。如果过期时间未到,浏览器依然访问本地的缓存文件,提高网站的访问速度。

以下是设置文件过期时间的方法:

header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');

header('Cache-Control: max-age=3600');

以上代码将设置文件的过期时间为当前时间加上3600秒,也就是1个小时。同时,还设置了Cache-Control响应头,max-age指定了缓存的最长时间。

三、条件请求缓存

条件请求缓存允许浏览器在必要时发送条件请求,以确定本地缓存是否仍然有效。如果资源没有发生变化,服务器会返回304 Not Modified响应码,而不是完整的资源文件。这种设置适用于那些不会经常更新的资源文件,比如图片、样式表、JavaScript文件等。

以下是设置条件请求缓存的方法:

$expires = 3600;

header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');

header('Cache-Control: max-age='.$expires.', must-revalidate');

header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT');

$etag = md5_file($file);

header('ETag: '.$etag);

if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {

if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == gmdate('D, d M Y H:i:s', $lastModified) || str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == $etag) {

header('HTTP/1.1 304 Not Modified');

exit;

}

}

以上代码将设置文件的过期时间为当前时间加上$expires秒,同时,还设置了Cache-Control响应头、Last-Modified响应头和ETag响应头。如果浏览器发送了If-Modified-Since或If-None-Match请求头,服务器会返回304 Not Modified响应码。

总结:

以上是三种常见的浏览器缓存设置方法,可以根据需要进行选择。禁用浏览器缓存适用于某些不需要缓存的动态页面,设置文件过期时间适用于那些不会经常更新的资源文件,条件请求缓存适用于那些周期性更新的资源文件。

在 PHP 中,可以通过设置响应头的方式来设置浏览器缓存。下面是一些常用的设置方式:

1. 设置 Cache-Control

Cache-Control 是 HTTP/1.1 协议中定义的一个响应头。通过设置 Cache-Control,可以告诉浏览器如何缓存响应的内容。

例如,如果要设置浏览器缓存 1 小时,可以使用以下代码:

```php

header('Cache-Control: max-age=3600');

2. 设置 Expires

Expires 是 HTTP/1.0 协议中定义的一个响应头。通过设置 Expires,可以告诉浏览器响应的过期时间。

例如,如果要设置浏览器缓存 1 小时,可以使用以下代码:

```php

header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');

3. 设置 Last-Modified 和 ETag

Last-Modified 和 ETag 是两个用于检查缓存是否过期的响应头。

Last-Modified 表示响应的最后修改时间,如果浏览器有缓存,会发送 If-Modified-Since 请求头,服务端可以用 Last-Modified 和此请求头比较来判断是否需要重新发送内容。代码如下:

```php

$lastModifiedTimestamp = filemtime($filePath);

$lastModified = gmdate('D, d M Y H:i:s', $lastModifiedTimestamp) . ' GMT';

header('Last-Modified: ' . $lastModified);

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] === $lastModified) {

header('HTTP/1.1 304 Not Modified');

exit;

}

ETag 是响应内容的唯一标识符,如果浏览器有缓存,会发送 If-None-Match 请求头,服务端可以用 ETag 和此请求头比较来判断是否需要重新发送内容。代码如下:

```php

$etag = md5_file($filePath);

header('ETag: ' . $etag);

if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] === $etag) {

header('HTTP/1.1 304 Not Modified');

exit;

}

以上是 PHP 中设置浏览器缓存的几种方式,可以根据自己的需求选择合适的方式来设置。