HTTP头: Last-Modified - 如何减少服务器负载?

5
想象以下使用情况:
我使用 AJAX 请求获取有关"Item"的一些信息,并使用此 URL:http://domain/items/show/1 在我的数据库中,所有项目都有一个称为 "modified_at" 的字段,我们在其中存储先前修改此项目的时刻。
如果我们需要在服务器端每次处理此请求,那么响应中的 "Last-Modified" 服务器 HTTP 标头如何最小化负载 / 减少请求 / 增加响应性?看起来我们并没有通过该响应减少 HTTP 请求的数量,也没有减轻服务器的负载。
到底是谁需要这个?
我是否正确,它主要用于节省带宽?
2个回答

3

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

如果您想减少请求数量,应在响应中设置显式的 Expires 标头。只有在 Expires 设置的时间到期后,客户端才会请求资源。


1

如果您的实现总是需要数据库查询,那么实现304可能不会有太大的好处。您可能只能节省呈现响应所需的资源。如果您的呈现需要大量处理,即使需要数据库查询,仍然值得这样做。

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

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

有关实现304响应的更多信息,请参见此问题。我的PHP HTTP条件获取答案的实现是否正确?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接