想象一下以下用例:
我使用AJAX请求获取有关Item
的一些信息并使用此网址:http://domain/items/show/1
在我的数据库中,所有项目都有一个名为modified_at
的字段,我们存储此项目之前修改的时刻。
如果我们每次都需要在服务器端处理此请求,Last-Modified
服务器HTTP头如何能够最小化加载/减少请求/提高响应能力?看起来我们不会减少使用该响应的HTTP请求数量,也不会减少服务器上的负载。
无论如何谁还需要这个?
我是对的,它主要用于节省带宽吗?
答案 0 :(得分:3)
目的是节省带宽,而不是在服务器上,而是在客户端上。无法访问的AJAX请求可能会使访问者的UI速度极慢,而不必一遍又一遍地传输数据,从而大大提高了客户端浏览器的性能。
如果要减少请求数,则应在响应中设置明确的Expires
标头。在Expires
设置的时间用完之前,客户端不会请求资源。
答案 1 :(得分:1)
如果您的实现总是需要db查询,那么实现304的可能性不大。您可能只保存呈现响应所需的资源。如果您的渲染需要大量处理,那么即使您需要数据库查询,它仍然是值得的。
但是,如果您有一种机制,可以在不使用数据库的情况下将请求uri映射到过期日期,您可能会注意到响应时间和服务器资源的更大改进。
我是如何实现类似方案的,是将每个请求缓存到磁盘。文件中的第一行(以不需要扫描的方式命名)包含元数据,例如etag
和ttl
。根据文件的修改时间和存储在其中的ttl
,我可以通过从磁盘只读一行来决定是否应该发送304响应(返回客户端),缓存文件的内容(新客户端,或者没有看到最近渲染的返回客户端),或者处理请求通常同时缓存刷新的结果。
有关实施304响应的更多信息,请参阅此问题。 Is my implementation of HTTP Conditional Get answers in PHP is OK?