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

and*_*rew 229 http browser-cache

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

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

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

Cod*_*nci 191

要在HTML中使用缓存控件,请使用元标记,例如

<meta http-equiv="Cache-control" content="public">
Run Code Online (Sandbox Code Playgroud)

内容字段中的值定义为以下四个值之一.

Cache-Control标题的一些信息如下

HTTP 1.1.允许值= PUBLIC | 私人| NO-CACHE | NO-STORE.

公共 - 可以缓存在公共共享缓存中.
私有 - 只能缓存在私有缓存中.
无缓存 - 可能无法缓存.
No-Store - 可以缓存但不归档.

指令CACHE-CONTROL:NO-CACHE表示不应使用缓存信息,而是应将请求转发到源服务器.该指令与PRAGMA具有相同的语义:NO-CACHE.

客户端应该包括PRAGMA:NO-CACHE和CACHE-CONTROL:NO-CACHE,当无缓存请求被发送到不知道是HTTP/1.1兼容的服务器时.另见EXPIRES.

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

  • [HTML5禁止此](http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#pragma-directives)和`<meta>`一直是一种可怕而又片状的方式指定缓存. (27认同)
  • Google为HTTP缓存IMO提供了最简单的参考之一:https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en#cache-control (3认同)
  • @porneL 我很难理解你的链接的哪一部分禁止回答的哪一部分......元标记规范没有说明不喜欢这里写的内容,或者禁止它? (2认同)
  • 关于"无商店"价值的引用文件不正确(尽管文件本身引用[RFC 2068](http://www.w3.org/Protocols/rfc2068/rfc2068.txt)) - "不 - store`可以防止文档在任何地方存储/缓存.而"no-cache"确实允许存储它,但它必须每次都与服务器一起检查.浏览器倾向于将"无缓存"页面存储到[启用后退按钮功能](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ)等. (2认同)

scu*_*ffe 129

您可以使用以下方法在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)

?>
Run Code Online (Sandbox Code Playgroud)

请注意,使用的确切标头将取决于您的需求(如果您需要支持HTTP 1.0和/或HTTP 1.1)

  • 对于绝大多数浏览器来说,`Pragma`和`Expires`可能是多余的.https://www.fastly.com/blog/headers-we-dont-want (3认同)
  • @thijsai 是的,HTTP/1.0 也已经过时了……仅根据您的用户矩阵使用您需要的标头 (2认同)

小智 44

正如我所写(在http://www.williamferreira.net/blog/2011/10/04/controle-de-cache-apache/),最好使用.htacces文件.但请注意将内容留在缓存中的时间.

使用:

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

其中:604800 = 7天

PS:这可用于重置任何标头

  • 如果您有权访问网络服务器配置,则可以将其放在此处而不是放在 .htaccess 中。有一种误解认为您必须将一些内容放入 Apache 的 .htaccess 中,并且它不断收到此类答案。您不需要任何 .htaccess 除非您无法直接访问网络服务器配置(例如在多虚拟主机环境中)。也许只写网络服务器配置或.htaccess。请参阅 https://www.danielmorell.com/guides/htaccess-seo/basics/dont-use-htaccess-unless-you-must (4认同)

ang*_*iwi 29

http://www.askapache.com/htaccess/apache-speed-cache-control.html上的页面建议使用以下内容:

添加缓存控制标头

这是你的根.htaccess文件,但如果你有权访问httpd.conf更好.

此代码使用FilesMatch指令和Header指令将Cache-Control Headers添加到某些文件.

# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

  • 订单在这个重要吗?"max-age = 290304000,public"或"public,max-age = 290304000"或两者同样正确? (3认同)
  • 值是否不冲突(例如“ cache”和“ no-cache”),顺序无关紧要。“最大年龄”和“公开”不会冲突,因此顺序无关紧要。 (2认同)
  • 请注意,由于它使用了 `Header` 指令,您必须启用 `mod_headers`。 (2认同)

Eri*_*cía 19

这是.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>
Run Code Online (Sandbox Code Playgroud)

  • 几乎是.htaccess文件的完美示例......如果包含特定图像以及如何写入图像的路径以及将.htaccess文件放在何处(例如,在图像目录或索引目录中),它将是完整的? .例如.'<IfModule mod_headers.c> <Files /img/myimage.jpg> Header附加Cache-Control"max-age = 3600,must-revalidate"</ Files> </ IfModule>'...这会有用吗? .或...或粘贴到img目录'<filesmatch"^(示例\ .jpg | sample\.png)$">标题集Cache-Control"max-age = 31536000,public"</ filesmatch>'..一个_all相同的策略似乎有风险 - 无论如何具体的例子如果可能的话会很好 (3认同)
  • 仅供参考:JS和CSS文件上的gzip压缩可以帮助破坏您的SSL加密.如果您依赖安全性,请不要打开gzip (2认同)
  • 这是缓存登录帐户页面,因此您无法从帐户中注销。更糟糕的是,某人无法仅访问帐户页面并使用上次用户登录的方式登录。不建议在电子商务网站上使用,您应该删除 `&lt;filesMatch "\.(x?html?|php)$"&gt;` 以避免静态 HTML 页面被缓存。其余的文件匹配都可以。 (2认同)
  • 如果你有代理缓存,你可以将`css`和`js`设置为private.我在您的链接中找不到任何关于此的建议.大多数CDN都建议您缓存这些值. (2认同)

Pet*_*aný 13

对于Apache服务器,您应该检查mod_expires以设置Expires和Cache-Control标头.

或者,您可以使用Header指令自行添加Cache-Control:

Header set Cache-Control "max-age=290304000, public"
Run Code Online (Sandbox Code Playgroud)


Kar*_*N G 5

元缓存控制标记允许Web发布者定义缓存应如何处理页面.它们包括声明应该可缓存的指令,缓存可以存储的内容,到期机制的修改以及重新验证和重新加载控制的指令.

允许的值是:

公共 - 可以缓存在公共共享缓存中
私有 - 可能只缓存在私有缓存中
无缓存 - 可能不缓存
无存储 - 可能缓存但不存档

区分大小写请注意.在您的网页来源中添加以下元标记.标记末尾的拼写差异是您使用"/> = 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">
Run Code Online (Sandbox Code Playgroud)

来源 - > MetaTags


Won*_*Bae 5

OWASP建议如下,

只要有可能,请确保缓存控制HTTP标头设置为no-cache,no-store,must-revalidate,private; 并且pragma HTTP标头设置为no-cache.

<IfModule mod_headers.c>
    Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
    Header set Pragma "no-cache"
</IfModule>
Run Code Online (Sandbox Code Playgroud)