http状态码304什么意思

1、http状态码304的理解html


一、若是客户端在请求一个文件的时候,发现本身缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。所以,若是请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就能够肯定是返回 304 仍是 200 。数据库


二、对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。浏览器


三、对于动态页面,就是动态产生的页面,每每没有包含 Last Modified 信息,这样浏览器、网关等都不会作缓存,也就是在每次请求的时候都完成一个 200 的请求。所以,对于动态页面作缓存加速,首先要在 Response 的 HTTP Header 中增长 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经作了一次数据库查询,可是能够避免接下来更多的数据库查询,而且没有返回页面内容而只是一个 HTTP Header,从而大大的下降带宽的消耗,对于用户的感受也是提升。 缓存

 


2、什么是”Last-Modified”?服务器


一、在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式相似这样:网络

Last-Modified: Fri, 12 May 2006 18:53:33 GMTspa


二、客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间以后文件是否有被修改过:htm

If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT图片

服务器端的程序先取得这个字段的值,而后与服务器上的数据最后修改时间对比,若是服务器端的资源没有变化,就直接返回 304 Not Modified 状态码,而后中止。这样就节省了传输数据量,达到节省带宽的目的。当服务器端代码发生改变或者重启服务器时,则从新发出资源,返回和第一次请求时相似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端可以获得最新的资源。资源

 


3、为何要使用条件请求


当用户访问一个网页时,条件请求能够加速网页的打开时间(由于能够省去传输整个响应体的时间),但仍然会有网络延迟,由于浏览器仍是得为每一个资源生成一条条件请求,而且等到服务器返回HTTP/304响应,才能读取缓存来显示网页.更理想的状况是,服务器在响应上指定Cache-Control或Expires指令,这样客户端就能知道该资源的可用时间为多长,也就能跳过条件请求的步骤,直接使用缓存中的资源了.


在下列状况下仍然须要使用条件请求


一、在超过服务器指定的过时时间以后

二、若是用户执行了刷新操做的话



参考资料: http状态码304  http://www.studyofnet.com/news/982.html

相关文章
相关标签/搜索