http 304

第一种方式:(Last-Modified)

1 客户端,第一次请求A页面

2 服务器会在响应头中加一个字段:Last-Modified,用于标示服务器返回的文件最后修改时间

3 客户端,第二次请求A页面,这时候,客户端在请求头中就有一个字段:If-Modify-Since

4 服务器收到请求后,用自动获取该文件的Last-Modified和If-Modify-Since进行对比,如果文件没改变,则返回304

第二种方式:(ETag)

ETag则必须由开发人员自己来和"If-None-Match"进行比较判断

ETag和Last-Modified用法上的区别是:ETag必须由开发人员来使用,而Last-Modified服务器会自动判断。也就是说服务器自己能够获取文件的"Last-Modified"并和"If-Modify-Since"进行对比,进而决定发送什么样的响应。而ETag则必须由开发人员自己来和"If-None-Match"进行比较判断。
     加上ETag一个用途是,假如文件被编辑了,但实际上内容并没有变化,此时可以指定ETag的值不变,这样它和浏览器发送过来的"If-None-Match"的值就相等了,进而可以指定响应为304,即未发生改变。如果不加ETag这个功能,则浏览器会发送200响应。

其他:

Cache-Control  no-cache — 强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认认证应用很有用(可以和public结合使用),或者严格要求使用最新数据 的应用(不惜牺牲使用缓存的所有好处) 
Pragma 当"no-cache"出现在请求消息中时,应用程序应当向原始服务器推送此请求,即使它已 
经在上次请求时已经缓存了一份拷贝。这样将保证客户端能接收到最权威的回应。它也用来 
在客户端发现其缓存中拷贝不可用或过期时,对拷贝进行强制刷新。 
cache-control 
max-age>0 时 直接从游览器缓存中 提取 
max-age<=0 时 向server 发送http 请求确认 ,该资源是否有修改 
有的话 返回200 ,无的话 返回304. 

参考:

http://www.educity.cn/wenda/123218.html

http://www.cnblogs.com/mofish/archive/2011/09/03/2165467.html

http://kb.cnblogs.com/page/130970/

http://blog.csdn.net/ysdaniel/article/details/7969766

原文地址:https://www.cnblogs.com/simonbaker/p/4563507.html