0

我使用 php 和 .htaccess 动态生成 htm 文件。我在某处读到我应该为 text/html 类型的文件删除 Etags?那是对的吗?我想知道我是否使用 etags,如果我不更改内容,我可以节省一些带宽。如果你们能告诉我是否可以将 etags 用于 htm 文件,我将不胜感激。

4

3 回答 3

0

如果可能,删除 Etag

最好的缓存方法是 max-age。W3C 要求浏览器必须使用 max-age(如果可用)。

当使用 max-age 时,浏览器将使用缓存版本,甚至不查询服务器。

这也意味着如果您要替换网页上的资源(例如 CSS、JS、IMG、链接),您应该重命名该资源。

下一个最佳缓存方法是 Expires。
在每个带有 的 PHP 页面中,echo始终包含max-age标题并不是一个坏主意。

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

这些也是明智的,(示例内容类型仅适用于 HTML)

header('Content-Type: text/html; charset=utf-8');
header('Connection: Keep-Alive');
header('Keep-Alive: timeout=50, max=100');

eTag 没有有效期。每次都必须检查资源。

如果您使用 max-age 或 Expires,浏览器将不会发出 HTTP 请求来检查资源。

当包含在 max-age 和/或 expires 中时,它会浪费听众空间并浪费一些服务器 CPU 周期来生成或查找 eTag 值。

eTag 的问题是除非资源非常大,否则它几乎没有什么好处。在 HTTP 请求中,与连接和等待时间相比,传输数据所需的时间通常是最少的。

使用 eTag,浏览器仍然需要执行 HTTP 请求。当 eTag 未更改时,则响应为 304。


这是一个典型的 HTTP 请求:

下载 2.9KB 仅需 3 毫秒
454 毫秒的请求时间。+ 58ms DNS(非常快)

在此处输入图像描述

DNS Lookup: 58 ms
Initial Connection: 192 ms
Time to First Byte: 262 ms
Content Download: 3 ms
Bytes In (downloaded): 2.9 KB

eTag 将节省 3 毫秒。

如果资源被缓存,除了节省 400-500 毫秒之外,它还会为另一个资源释放连接。


这是来自 Intel
441 ms的 301 响应

在此处输入图像描述

DNS Lookup: 103 ms
Initial Connection: 219 ms
Time to First Byte: 222 ms
Content Download: ms
Bytes In (downloaded): 0.1 KB
于 2015-04-13T03:19:23.337 回答
0

即使是动态内容(如 php 脚本),Etags 也可以加速您的网站。尤其是在移动连接上,这很重要,因为连接速度较慢。我在一些移动网站上使用 ETag 标头,如下所示:

https://gist.github.com/oliworx/4951478

提示:您不能在页面中包含当前时间或其他经常更改的内容,因为这会阻止它被客户端(浏览器)缓存。

于 2013-02-15T10:41:48.317 回答
0

据我所知,Etag 是一个 http 标头,由缓存系统使用的 HTTP 服务器生成。

想法:

  • 您要求 stackoverflow.com 图像 logo.png
  • stackoverflow.com 将使用 HTTP 304 回复您(内容未修改,etag:XXXXXX)
  • 在再次询问图像之前,您的浏览器会检查缓存中是否存在名为:logo.png 的资源,来自网站:stackoverflow,etag:XXXXXXX
  • 如果浏览器找到它,它将从缓存中加载图像,而不下载
  • 如果找不到它,它会再次请求网络服务器下载它。

所以......你想要什么建议使用 ETags ?

如果您想了解更多关于 ETag 的信息,请下载 HttpFox for firefox。

Apache 有自己的缓存系统,当您下载或需要任何“静态”下载时使用它,例如 html 文件和图像。

如果你想在动态上下文中执行它,你必须自己实现它。

于 2010-04-23T02:16:00.760 回答