`

基于HTTP协议的客户端缓存

 
阅读更多

提到缓存,一般都会想起redis、memcached等分布式缓存系统。虽然使用这些服务器端缓存速度能提升不少,但其实还是需要客户端下载这部分数据,目前在移动互联网领域,节省流量是很有必要的,因此工作中也就需要加入客户端缓存的相关技术。

 

怎么使用客户端缓存?

1、用http报头中的last-modified和if-modified-since属性:

客户端请求某个URL的页面时,服务器响应200的同时会下发一个last-modified属性表明请求页面的最后更新时间。

客户端再次请求服务器时,根据http协议会在报头添加if-modified-since属性,询问请求页面是否被更新过。

如果服务器端没有更新过请求的页面,则自动响应http 304(not changed)状态码,而响应的Body为空,从而减少了数据传输。

如果服务器更新过了请求的页面,则会将最新的数据响应给客户端。

因此,只要客户端将第一次服务器响应的数据和last-modified在本地存起来,以后的请求在if-modified-since中使用原先存储的时间,如果遇到了响应http 304就直接读本地存储的数据,如果不是304就及时更新本地存储的数据就行了。这样能比每次请求都拉取数据要节省很多流量。

2、关于Etag:

Etag主要为了解决last-modified无法解决的一些问题。

(1)一些文件的内容并不改变,仅仅改变修改时间。

(2)文件在1s内修改了N次,if-modified-since能检查到的粒度是秒级的,这种修改无法判断。

(3)服务器不能精确的得到文件的最后修改时间;

与last-modified类似:

首先,客户端第一次请求时,服务器计算好etag并返回给客户端。客户端保存etag信息和响应数据,再次发送请求时发一个If-None-Match头,并包含上次服务器响应的etag值。

其次,服务器判断发送过来的Etag和计算出来的Etag匹配,如果If-None-Match为False,不返回200,返回304,客户端继续使用本地缓存;

如果同时使用if-modified-since和If-None-Match,会在完全匹配if-modified-since和If-None-Match之后,服务器才能返回304。

 

关于Etag的几篇参考资料:

http://www.infoq.com/cn/articles/etags 使用ETags减少Web应用带宽和负载

http://blog.csdn.net/kikikind/article/details/6266101  Etag与HTTP缓存机制

http://www.iteye.com/topic/656658  HTTP协议缓存策略深入详解之etag妙用

 

分享到:
评论

相关推荐

    基于MFC的http协议客户端

    通过以上步骤,一个简单的基于MFC的HTTP客户端就可以被构建出来。这个客户端不仅对新手有指导意义,也是学习MFC与网络编程结合的绝佳实践。在实际应用中,你可能还需要根据具体需求进行功能扩展,比如支持上传文件、...

    基于POP3、SMTP协议的MFC实现邮件客户端

    支持本地缓存最新的3封邮件。 2.正常解析出收件人、发件人、主题、日期、邮件内容。 3.正常解析无格式纯文本,支持中文、英文和中英混杂文本。 4.接收邮件时存在附件则弹出保存文件的对话框,无附件则对话框提示该...

    基于Android微博客户端的设计与实现

    这通常使用HTTP/HTTPS协议,可能涉及到JSON或XML格式的数据解析。Android中的OkHttp或Volley库可以用来处理网络请求,Retrofit库则可以简化API接口的调用。 4. **数据管理**:为了缓存用户的数据,如微博、关注列表...

    iscsi本地缓存(支持多盘符)

    ISCSI(Internet Small Computer System Interface)是一种基于TCP/IP协议的存储网络协议,它允许网络设备通过IP网络传输SCSI命令,实现存储设备的远程访问。ISCSI本地缓存技术是针对ISCSI存储系统的一种优化手段,...

    HTTP协议和WEB服务器工作原理

    - **缓存机制**:HTTP协议支持缓存机制,以减少重复下载相同资源的需要,提高用户体验。 ##### 2. HTTP请求与响应 **请求**由客户端发送给服务器,主要包括: - **请求行**:包括请求方法、资源路径和协议版本。 ...

    基于CS的客户端、服务器源代码

    在源代码中,客户端通常包含UI设计、网络通信模块(如HTTP/HTTPS协议)、数据解析和业务逻辑。客户端通过API(Application Programming Interface)与服务器通信,发送请求并接收响应。 3. **服务器** 服务器端...

    基于实时流协议的流媒体客户端.pdf

    当前的流媒体服务主要分为两种:基于协议的顺序流和基于HTTP/RTSP/RTP的实时流。顺序流服务利用现有的服务器Protocol传送视频文件,它只能严格按照从头到尾的顺序播放,客户无法进行随意拖动,也只有一部分媒体格式...

    易语言源码易语言Memcached协议客户端模块源码.rar

    在这个"易语言源码易语言Memcached协议客户端模块源码.rar"压缩包中,我们找到了一个易语言实现的Memcached协议客户端模块的源代码。Memcached是一种高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提高...

    HTTP客户端

    在本场景中,我们讨论的是一款基于MFC(Microsoft Foundation Classes)开发的HTTP客户端工具。MFC是微软提供的一套C++库,用于简化Windows应用程序的开发。通过MFC,开发者可以利用其丰富的类结构来构建用户界面,...

    基于REST的Web服务客户端.rar

    总之,基于REST的Web服务客户端是通过HTTP协议与RESTful服务交互的程序。它需要理解和遵循REST原则,正确构造请求并解析响应。开发者可以通过各种语言和工具实现这样的客户端,以高效、灵活地与Web服务进行通信。...

    认清http协议本质

    9. 缓存机制:HTTP允许客户端缓存资源,通过Cache-Control和ETag等头部字段控制缓存策略,减少不必要的网络传输,提高性能。 10. 版本升级:随着互联网的发展,HTTP协议也在不断演进,如HTTP/1.1、HTTP/2和最新的...

    基于HTTP协议的开源中文分词系统,64位

    【标题】:“基于HTTP协议的开源中文分词系统,64位” 【描述】:“基于HTTP协议的开源中文分词系统,64位,详细请见http://blog.s135.com/httpcws_v100/3/1/” 这个标题和描述提到的是一个专门针对中文文本处理的...

    基于Android平台的新浪微博客户端

    1. **网络通信**:微博客户端需要与服务器进行数据交互,常用的是使用HTTP协议的RESTful API。Android中的`HttpURLConnection`或第三方库如Volley、OkHttp可以方便地处理网络请求。JSON是常见的数据交换格式,需了解...

    基于P2P的客户端-服务器端互传文件程序

    5. **文件传输**:在客户端-服务器模式下,通常通过HTTP或FTP协议进行文件传输。而在P2P模式下,可能是通过自定义的协议或者如BitTorrent这样的标准协议。这些协议规定了数据包的格式、握手过程、断点续传等细节。 ...

    redis 基于 C 的客户端完整代码和实例

    本文将深入探讨 Redis 基于 C 语言的客户端实现,结合提供的 "xredis-master" 压缩包中的源码,解析其关键知识点。 一、Redis 协议 Redis 使用自定义的简单协议,它是一种基于行的协议,以 "\r\n"(回车换行)作为...

    http协议中文版(http协议中文版)

    8. **缓存机制**:HTTP支持客户端缓存,减少不必要的网络传输,提高性能。 9. **分块传输编码**:允许大文件分块传输,提高效率。 10. **Keep-Alive与连接管理**:保持TCP连接,减少建立连接的开销。 这本书可能是...

    Laravel开发-laravel-soap Soap 协议客户端

    总结来说,`laravel-soap`为Laravel开发者提供了便捷的SOAP协议客户端支持,使得在Laravel项目中集成和调用SOAP服务变得更加简单。通过理解SOAP协议的基本概念和`laravel-soap`的使用方式,开发者可以更好地实现跨...

    Android http缓存实现

    HTTP缓存主要遵循HTTP协议中的缓存控制机制,如ETag、Last-Modified等头信息。下面将详细讨论Android中如何实现HTTP缓存。 1. **Android HTTP缓存的基本概念** - **HTTP缓存策略**:主要有两种,一是强缓存(Cache...

Global site tag (gtag.js) - Google Analytics