HTTP 标头:Last-Modified - 如何最大限度地减少服务器负载?

发布于 2024-09-03 15:38:11 字数 412 浏览 7 评论 0原文

想象一下以下用例:

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

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

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

到底谁需要这个?

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

Imagine the following use case:

I use an AJAX request for getting some info about Item and use this URL: http://domain/items/show/1

In my database all items have a field called modified_at where we store the moment when this item was previously modified.

How can Last-Modified server HTTP header in response can minimize load/reduce requests/increase responsiveness if we need to process this request every time on the server side? It looks like we don't reduce the number of HTTP requests with that response and we don't reduce the load on server.

Who needs this anyway?

Am I right, that it's used mostly for the purpose of saving bandwidth?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

中二柚 2024-09-10 15:38:11

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

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

The purpose is to save bandwidth, not on your server but on the client. Uncachable AJAX requests will likely make the UI incredibly slow for your visitors, not having to transfer data over and over again drastically improves performance in the client's browser.

If you want to reduce the number of reqs you should set an explicit Expires header on the response. The client won't request the resource until the time set by Expires has run out.

倾城°AllureLove 2024-09-10 15:38:11

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

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

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

有关实施 304 响应的更多信息,请参阅此问题。 我的 HTTP Conditional 实现是否获取答案在 PHP 中可以吗?

If your implementation will always require a db query, chances are implementing 304 won't do much good. You might only be saving the resources required for rendering the response. If your rendering will require a lot of processing, it might still be worth it, even if you require a db query.

However, if you have a mechanism for mapping a request uri to an expires date without using a database, you might notice bigger improvement in response times and saved server resources.

How I've implemented a similar scenario, was by caching every request to disk. The first line in the file (named in a way that required no scanning) contains meta data, such as etag and ttl. Based on the modified time for the file, and the ttl stored in it, I can, by reading only one line from disk, decide if I should send a 304 response (returning client), the contents of the cache file (new client, or returning client that hasn't seen recent rendering), or process the request normally caching the refreshed result at the same time.

See this question for further information about implementing 304 responses. Is my implementation of HTTP Conditional Get answers in PHP is OK?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文