想象一下下面的用例:
我使用一个AJAX请求来获取有关Item的一些信息,并使用这个URL:http://domain/items/show/1
在我的数据库中,所有项都有一个名为modified_at的字段,我们在其中存储该项之前被修改的时刻。
如果我们每次都需要在服务器端处理这个请求,那么响应中的Last-Modified服务器header如何能够最小化负载/减少请求/提高响应性?看起来我们没有减少响应的HTTP请求的数量,我们也没有减少服务器上的负载。
不管怎么说,谁需要这个呢?
我说的对吗,它主要用于节省带宽的目的?
发布于 2010-05-30 18:57:27
这样做的目的是节省带宽,不是在服务器上,而是在客户端。不可缓存的AJAX请求可能会使访问者的UI变得非常慢,而不必一次又一次地传输数据,从而极大地提高了客户端浏览器的性能。
如果你想减少请求的数量,你应该在响应上设置一个明确的Expires头。在Expires设置的时间用完之前,客户端不会请求资源。
发布于 2010-05-30 17:49:10
如果你的实现总是需要一个db查询,那么很可能实现304不会有多大的好处。您可能只保存呈现响应所需的资源。如果你的渲染需要大量的处理,即使你需要一个数据库查询,它仍然是值得的。
但是,如果您有一种将请求uri映射到过期日期而不使用数据库的机制,您可能会注意到在响应时间和节省的服务器资源方面有更大的改进。
我是如何实现类似的场景的,就是将每个请求缓存到磁盘。文件中的第一行(以不需要扫描的方式命名)包含元数据,如etag和ttl。根据文件的修改时间和存储在其中的ttl,我可以通过只从磁盘读取一行,来决定是应该发送304响应(返回客户端)、缓存文件的内容(新客户端,还是还没有看到最近渲染的返回客户端),还是应该正常处理请求,同时缓存刷新的结果。
有关实现304响应的详细信息,请参阅此问题。Is my implementation of HTTP Conditional Get answers in PHP is OK?
https://stackoverflow.com/questions/2938085
复制相似问题