当我使用Privoxy检查我的浏览器从一个站点下载的内容时,似乎构成页面的所有元素(CSS,JS,图标等)每次都被重载,即。浏览器不会缓存它们(抱歉,新用户不允许包含URL):
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<TITLE>My Site</TITLE>
<meta name="keywords" lang="fr" content="whatever">
<meta name="Description" lang="fr" content="whatever">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Category" content="Internet">
<meta name="revisit-after" content="2 days">
<meta name="author" content="webmaster@example.com">
<meta name="identifier-URL" content="http://www.example.com">
<meta name="robots" content="index, follow">
<meta name="classification" content="Internet">
<meta name="distribution" content="global">
<meta name="geography" content="Paris">
<meta name='language' content='fr'><meta http-equiv='content-language' content='fr'><meta name='rating' content='General'>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="alternate" type="application/rss+xml" title="My RSS" href="http://www.example.com/rss.php" />
<link rel="shortcut icon" href="favicon.ico">
<link rel="icon" href="animated_favicon1.gif" type="image/gif">
<link rel="stylesheet" href="miseenforme.css" type="text/css">
<link rel="stylesheet" href="css/screen2009.css" type="text/css">
<!--[if lte IE 6]>
<link rel="stylesheet" href="css/screen2009-ie6.css" type="text/css">
<![endif]-->
<style type="text/css">@import url(jscalendar-1.0/calendar-blue.css);</style>
<script type="text/javascript" src="jscalendar-1.0/calendar.js"></script>
<script type="text/javascript" src="jscalendar-1.0/lang/calendar-fr.js"></script>
<script type="text/javascript" src="jscalendar-1.0/calendar-setup.js"></script>
<script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
<script type="text/javascript" src="jquery.scrollTo-min.js"></script>
<script type="text/javascript" src="jquery.autogrow.js"></script>
<script type="text/javascript" src="fonctionsjs.js?maj=v1"></script>
</head>
事实上,我在这个HTML标题中没有看到任何与缓存相关的指令。
有人可以确认浏览器(IE,Firefox,Chrome)除非在HTML标题中被告知,否则不会缓存任何内容吗?
我们是否需要配置浏览器以强制它们缓存元素?
谢谢。
答案 0 :(得分:1)
简短版本:请勿更改浏览器,发送与缓存相关的HTTP标头*信息。
长版本:如果您没有明确告诉浏览器什么以及如何缓存,您可以自由选择。这样的设置是可配置的,并且在用户和浏览器之间变化很大,但通常你可以期望浏览器积极地缓存图像,js和css,但不是html(这非常粗糙,只是我的经验)。你依靠浏览器来解决这个问题是不合理的,如果你完全关心你需要明确地告诉他们,你还需要用响应头而不是元标记来做这个,因为元标记根本就没有得到尊重。
较长版本的较短版本:缓存复杂。我建议你谷歌为你选择的语言平台提供一个教程。
* 不 html head标签的内容,HTTP标头的内容
答案 1 :(得分:1)
你确定它们没有被缓存吗?如果您的服务器没有为静态元素输出缓存控制头,浏览器仍会向服务器发出每个元素的HTTP请求(带有缓存文件的时间戳)。然后,服务器应以304状态响应,而不是修改。因此,文件本身不会再次传输,但这个请求响应可能正是您在Privoxy中看到的。
要保存请求,您必须配置服务器以设置缓存控制标头。但是,请注意,服务器上的更改可能不会反映在客户端上,因此您需要在更改它们时重命名css / static文件,以确保所有客户端都使用最新版本。
答案 2 :(得分:0)
缓存(缺少服务器配置或其他显式指令)通常是许多项目的浏览器设置。如果您没有足够大的缓存设置,或者您禁用了缓存,或者您的浏览器不确定它是同一个文件,或者是否有其他任何可能,它将重新下载这些项目。
您可以设置一些服务器控件。如果您告诉我们您正在运行的服务器,您可能会得到更好的答案......
最后,您可以查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html和http://www.web-caching.com/mnot_tutorial/how.html以获取更多信息。
基于your reply(我猜这是你的新名字......)你想看看你的Apache设置。我从未使用过Apache,所以我不知道从哪里开始......
您还希望查看我和其他人链接的一些文章。这不是一个简单的话题。 One article已被关联了几次。 (提示提示)
不是PHP程序员我不是100%肯定这一点,但我愿意打赌PHP有办法覆盖服务器的缓存头设置。可能值得在这里或在php.net上查看。
答案 3 :(得分:0)
我认为首先要检查的是 - 您的浏览器是否禁用了缓存?
AFAIK,浏览器会缓存大多数页面元素,除非服务器响应中的浏览器设置或HTTP标头禁用此缓存。
第二件事是在输出中插入与缓存相关的标题,以便明确指示浏览器缓存所有可用信息(在设定的时间段内)。
关于缓存主题的Here's an excellent tutorial有助于消除对浏览器缓存的确切运作方式的许多误解。
答案 4 :(得分:0)
使用YSlow确定应该采取哪些措施来提高页面加载性能。它还告诉您应该如何最大化客户端缓存(即在浏览器中)。