5

想象以下用例:

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

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

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

谁还需要这个?

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

4

2 回答 2

3

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

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

于 2010-05-30T10:57:26.800 回答
1

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

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

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

有关实施 304 响应的更多信息,请参阅此问题。我在 PHP 中执行 HTTP Conditional Get answers 是否可以?

于 2010-05-30T09:49:09.977 回答