【问题标题】:HTTP headers: Last-Modified - how can it mimimize server load?HTTP 标头:Last-Modified - 如何最小化服务器负载?
【发布时间】:2010-05-30 09:27:54
【问题描述】:

想象以下用例:

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

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

如果我们每次都需要在服务器端处理这个请求,Last-Modified 响应的服务器 HTTP 标头如何能够最小化负载/减少请求/增加响应能力?看起来我们没有通过该响应减少 HTTP 请求的数量,也没有减少服务器上的负载。

谁还需要这个?

我说得对吗,它主要用于节省带宽?

【问题讨论】:

    标签: http caching last-modified


    【解决方案1】:

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

    如果你想减少请求的数量,你应该在响应中设置一个显式的Expires 标头。在Expires设置的时间用完之前,客户端不会请求资源。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-12-28
        • 2010-10-23
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-25
        • 2014-03-31
        相关资源
        最近更新 更多