HTTP标头:Last-Modified - 如何最小化服务器负载?

时间:2010-05-30 09:27:55

标签: http caching last-modified

想象一下以下用例:

我使用AJAX请求获取有关Item的一些信息并使用此网址:http://domain/items/show/1

在我的数据库中,所有项目都有一个名为modified_at的字段,我们存储此项目之前修改的时刻。

如果我们每次都需要在服务器端处理此请求,Last-Modified服务器HTTP头如何能够最小化加载/减少请求/提高响应能力?看起来我们不会减少使用该响应的HTTP请求数量,也不会减少服务器上的负载。

无论如何谁还需要这个?

我是对的,它主要用于节省带宽吗?

2 个答案:

答案 0 :(得分:3)

目的是节省带宽,而不是在服务器上,而是在客户端上。无法访问的AJAX请求可能会使访问者的UI速度极慢,而不必一遍又一遍地传输数据,从而大大提高了客户端浏览器的性能。

如果要减少请求数,则应在响应中设置明确的Expires标头。在Expires设置的时间用完之前,客户端不会请求资源。

答案 1 :(得分:1)

如果您的实现总是需要db查询,那么实现304的可能性不大。您可能只保存呈现响应所需的资源。如果您的渲染需要大量处理,那么即使您需要数据库查询,它仍然是值得的。

但是,如果您有一种机制,可以在不使用数据库的情况下将请求uri映射到过期日期,您可能会注意到响应时间和服务器资源的更大改进。

我是如何实现类似方案的,是将每个请求缓存到磁盘。文件中的第一行(以不需要扫描的方式命名)包含元数据,例如etagttl。根据文件的修改时间和存储在其中的ttl,我可以通过从磁盘只读一行来决定是否应该发送304响应(返回客户端),缓存文件的内容(新客户端,或者没有看到最近渲染的返回客户端),或者处理请求通常同时缓存刷新的结果。

有关实施304响应的更多信息,请参阅此问题。 Is my implementation of HTTP Conditional Get answers in PHP is OK?