网络---关于HTTP 304状态码的理解
2016-02-15 23:43
399 查看
有时候我们使用七牛过程中会遇到对浏览器缓存下请求资源返回304的情况流量的计费的情况,这里就需要了解HTTP 304的响应状态的资源更新机制。
首先看一个关于304请求的响应头的信息,这里面有两个比较重要的请求头字段:If-Modified-Since 和 If-None-Match,这两个字段表示发送的是一个条件请求。
当客户端缓存了目标资源但不确定该缓存资源是否是最新版本的时候, 就会发送一个条件请求,这样就可以辨别出一个请求是否是条件请求,在进行条件请求时,客户端会提供给服务器一个If-Modified-Since请求头,其值为服务器上次返回的Last-Modified响应头中的Date日期值,还会提供一个If-None-Match请求头,值为服务器上次返回的ETag响应头的值。
服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的,如果是的话,服务器就会返回HTTP/304 Not Modified响应头, 但没有响应体.客户端收到304响应后,就会从本地缓存中读取对应的资源.
所以:当访问七牛资源出现304访问的情况下其实就是先在本地缓存了访问的资源,然后请求的时候流量其实就是cdn返回的响应头的字节数的流量。
这里以Chrome为例说一下缓存资源在本地的保存的位置,通过在Chrome浏览器的地址栏输入Chrome:Version查看Chrome浏览器保存文件的位置:
另一种情况是,如果服务器认为客户端缓存的资源已经过期了,那么服务器就会返回HTTP/200 OK响应,响应体就是该资源当前最新的内容.客户端收到200响应后,就会用新的响应体覆盖掉旧的缓存资源.
只有在客户端缓存了对应资源且该资源的响应头中包含了Last-Modified或ETag的情况下,才可能发送条件请求.如果这两个头都不存在,则必须无条件(unconditionally)请求该资源,服务器也就必须返回完整的资源数据.
另外,有时候我们浏览器调试的时候不希望本地缓存,可以设置取消缓存即可:
首先看一个关于304请求的响应头的信息,这里面有两个比较重要的请求头字段:If-Modified-Since 和 If-None-Match,这两个字段表示发送的是一个条件请求。
当客户端缓存了目标资源但不确定该缓存资源是否是最新版本的时候, 就会发送一个条件请求,这样就可以辨别出一个请求是否是条件请求,在进行条件请求时,客户端会提供给服务器一个If-Modified-Since请求头,其值为服务器上次返回的Last-Modified响应头中的Date日期值,还会提供一个If-None-Match请求头,值为服务器上次返回的ETag响应头的值。
服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的,如果是的话,服务器就会返回HTTP/304 Not Modified响应头, 但没有响应体.客户端收到304响应后,就会从本地缓存中读取对应的资源.
所以:当访问七牛资源出现304访问的情况下其实就是先在本地缓存了访问的资源,然后请求的时候流量其实就是cdn返回的响应头的字节数的流量。
这里以Chrome为例说一下缓存资源在本地的保存的位置,通过在Chrome浏览器的地址栏输入Chrome:Version查看Chrome浏览器保存文件的位置:
另一种情况是,如果服务器认为客户端缓存的资源已经过期了,那么服务器就会返回HTTP/200 OK响应,响应体就是该资源当前最新的内容.客户端收到200响应后,就会用新的响应体覆盖掉旧的缓存资源.
只有在客户端缓存了对应资源且该资源的响应头中包含了Last-Modified或ETag的情况下,才可能发送条件请求.如果这两个头都不存在,则必须无条件(unconditionally)请求该资源,服务器也就必须返回完整的资源数据.
另外,有时候我们浏览器调试的时候不希望本地缓存,可以设置取消缓存即可:
相关文章推荐
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
- linux网络基础
- 常见HTTP错误代码大全
- Android 中访问HTTP
- 网络相关
- linux下网络驱动
- 蓝懿IOS网络服务器与客户端
- 2.2 常用工具类 网络 支撑 JSON
- aysnctask 处理网络事件
- android 5.0及以上https No peer certificate
- 建立网络链接传输数据 HttpClientUtil
- AsyncTask+GridView+BaseAdapter实现解析网络数据,图文混排。HttpUtils,JsonUtils等
- BP人工神经网络的C++实现
- IOS-网络(ASIHTTPRequest的使用简介)
- python实战系列之批量主机ping网络测试(七)
- 网络多线程你的理解有多少??
- netfilter-在内核态操作网络数据包
- I'm upgrading an app to API 23 where org.apache.http is deprecated
- netfilter-在内核态操作网络数据包
- http-2.4.18 安装