以下是我对HTTP 304的理解。有需要的朋友可以过来参考一下,希望能帮到你。
未修改的客户机有一个缓冲的文档,并发送一个有条件的请求(通常,提供If-Modified-Since头来指示客户机只想在指定日期之后更新文档)。告诉服务器客户端原来缓冲的文档可以再次使用。
当客户端请求一个文件时,它发现其缓存的文件具有最后一次修改,因此请求将包括If Modified Since,这是缓存文件的最后一次修改。因此,如果请求包含If Modified Since,则意味着客户端中已经有一个缓存。只要判断这个时间和当前请求文件的修改时间,就可以确定是返回304还是200。对于静态文件,如CSS和图片,服务器将自动完成上次修改和如果修改以来的比较,并完成缓存或更新。然而,动态页面,即动态生成的页面,通常不包含最后修改的信息,因此浏览器、网关等。不会缓存,也就是说,每次发出请求时都会完成一个200的请求。
所以要加快动态页面的缓存,首先在响应的HTTP头中加入Last Modified的定义,然后根据请求中的If Modified Since和请求内容的更新时间返回200或304。虽然数据库查询在返回304的时候已经做过一次了,但是可以避免更多的数据库查询,而且不是返回页面内容,只是一个HTTP头,这样就大大减少了带宽消耗,提高了用户的感受。
当这些缓存有效时,通过HttpWatch查看请求将得到以下结果:
第一次访问200
单击鼠标两次以访问(缓存)
按F5刷新304
按Ctrl+F5强制刷新200
如果是,说明缓存确实有效。这是我对HTTP 304的理解。