如何设置HTTP头(缓存控制)?

如何为我的网站启用浏览器缓存?我要把cache-control:public放在header的某个地方吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
Cache-Control:public;
>

我正在使用最新版本的PHP开发XAMPP的最新版本。

807749 次浏览

要在HTML中使用缓存控制,您可以使用meta标签,例如。

<meta http-equiv="Cache-control" content="public">

内容字段中的值定义为下面四个值之一。

Cache-Control头的一些信息如下所示

HTTP 1.1。允许的值= PUBLIC | PRIVATE | NO-CACHE | NO-STORE。

Public -可以缓存在公共共享缓存中。
私有-只能在私有缓存中缓存。
No-Cache -可能不会被缓存。

. No-Store -可以缓存但不存档

CACHE-CONTROL:NO-CACHE指示不应该使用缓存的信息 相反,请求应该被转发到源服务器。该指令与PRAGMA:NO-CACHE.

具有相同的语义

客户端应该包含PRAGMA: NO-CACHE和CACHE-CONTROL: NO-CACHE,当一个无缓存请求被发送到一个不知道是否符合HTTP/1.1的服务器时。另请参见EXPIRES。

注意:在HTTP中指定缓存命令可能比在META语句中更好,在META语句中,它们的影响可能比浏览器更大,但代理和其他中介可能缓存信息。

对于Apache服务器,你应该检查mod_expires是否设置了Expires和Cache-Control头。

或者,你可以使用指令自己添加Cache-Control:

Header set Cache-Control "max-age=290304000, public"

在PHP中设置头文件可以使用:

<?php
//set headers to NOT cache a page
header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Pragma: no-cache"); //HTTP 1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past


//or, if you DO want a file to cache, use:
header("Cache-Control: max-age=2592000"); //30days (60sec * 60min * 24hours * 30days)


?>

注意,确切使用的头文件将取决于你的需要(如果你需要支持HTTP 1.0和/或HTTP 1.1)

http://www.askapache.com/htaccess/apache-speed-cache-control.html的页面建议使用这样的东西:

添加Cache-Control头

这是在你的根。htaccess文件,但如果你有访问

这段代码使用FilesMatch指令和Header指令为某些文件添加Cache-Control头文件
# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>

正如我所写的最好使用文件.htaccess。但是要注意将内容保留在缓存中的时间。

使用:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

其中:604800 = 7天

PS:这可以用来重置任何头部

元缓存控制标记允许Web发布者定义缓存应该如何处理页面。它们包括声明什么应该可缓存、什么可以由缓存存储、修改过期机制以及重新验证和的指令 重新加载控制。< / p >

允许的取值为:

Public -可以在公共共享缓存中缓存
Private -只能在私有缓存
中缓存 no-Cache -不能缓存
no-Store -可以缓存但不存档

请注意区分大小写。在网页的源代码中添加以下元标签。标签末尾拼写的区别在于使用“/> = xml”或“> = html”。

    <meta http-equiv="Cache-control" content="public">
<meta http-equiv="Cache-control" content="private">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache-control" content="no-store">

源- > 元标签

OWASP建议如下:

尽可能确保缓存控制HTTP头设置为无缓存,无存储,必须重新验证,私有;并且pragma HTTP头设置为无缓存。

<IfModule mod_headers.c>
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</IfModule>

这是我在实际网站中使用的最好的.htaccess:

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>


##Tweaks##
Header set X-Frame-Options SAMEORIGIN


## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##


<IfModule mod_headers.c>
Header set Connection keep-alive
<filesmatch "\.(ico|flv|gif|swf|eot|woff|otf|ttf|svg)$">
Header set Cache-Control "max-age=2592000, public"
</filesmatch>
<filesmatch "\.(jpg|jpeg|png)$">
Header set Cache-Control "max-age=1209600, public"
</filesmatch>
# css and js should use private for proxy caching https://developers.google.com/speed/docs/best-practices/caching#LeverageProxyCaching
<filesmatch "\.(css)$">
Header set Cache-Control "max-age=31536000, private"
</filesmatch>
<filesmatch "\.(js)$">
Header set Cache-Control "max-age=1209600, private"
</filesmatch>
<filesMatch "\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</filesMatch>
</IfModule>