带缓存的HTTP代理服务器(五)
来源:互联网 发布:凌阳单片机语音识别 编辑:程序博客网 时间:2024/05/01 00:03
代理服务器缓存
项目地址:https://code.csdn.net/sakeven/httpproxy
关于WEB 缓存基础知识,请先阅读这篇文章:
https://www.mnot.net/cache_docs/ (或者中文版
http://www.cnblogs.com/xyjsw/archive/2010/01/27/1657825.html)
缓存代理
缓存代理通常规模较大,因为它要为成千上百的用户提供服务,也正因为此,它必须是一个共享缓存,它的每一个缓存副本必须可以为多用户使用。
基于此的一个重要作用是:可以明显地减少响应时间和降低网络流量。
缓存处理步骤
对一条HTTP GET报文的基本缓存处理过程包括7个步骤:
1. 接收——缓存从网络中读取抵达的请求报文。
2. 解析——缓存对报文进行解析,提取出URL和各种首部。
3. 查询——缓存查看是否已有本地副本可用,如果没有,就获取一份副本(并将其保存在本地)。
4. 新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。
5. 创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文,
6. 发送——缓存通过网络将响应发回给客户端。
7. 日志——缓存可选地创建一个日志文件条目来描述这个事物。
这里我们需要重点关注的是新鲜度检测。
新鲜度检测
缓存是有有效期,在有效期内,缓存副本可以被任意多次使用,一旦过了有效期,就应该重校验这个缓存副本。
与缓存控制有关的响应首部:Cache-Control、Expires、Date。
Cache-Control:
public:表示可以被任何缓存器缓存
private:禁止响应被共有缓存器缓存
no-cache:强制每次请求必须向服务器验证
no-store:强制禁止响应被缓存
max-age=(秒)、s-maxage=(秒):报文创建后的相对过期时间,后者用于代理服务器缓存
Expires:指定绝对过期时间,如果Cache-Control中存在max-age或s-maxage,优先使用Cache-Control中的,而不是Expires。
Date:报文创建的日期和时间
利用上面几个响应首部,我们可以计算出缓存副本的有效期,当我们在有期内发起请求,我们可以直接提供缓存副本作为响应。
缓存重校验
与重校验有关的首部:
Last-Modified:文档最后修改时间
If-Modified-Since:用于发起条件请求,与Last-Modified配合使用。如果自上次请求之后,文档未被修改过,则服务器返回一条304 Not Modified响应;否则送回新的文档。
Etag:实体标签
If-None-Match:用于发起条件请求,实体标签在验证,与 Etag 配合使用,与If-Modified-Since类似。
以上两个用于重校验的条件请求因尽可能同时使用。
关于缓存这块的代码,还在进行中。
- 带缓存的HTTP代理服务器(五)
- 带缓存的http代理服务器(一)
- 带缓存的http代理服务器(二)
- 带缓存的HTTP代理服务器(三)
- 带缓存的HTTP代理服务器(四)
- 带缓存的HTTP代理服务器(六)
- 带缓存的HTTP代理服务器(七)
- 带缓存的HTTP代理服务器(八)
- 带缓存的HTTP 代理服务器(9)
- 一个简单的带缓存http代理
- HTTP代理服务器的实现
- 第5章 与HTTP协作的Web服务器、缓存代理服务器、客户端缓存
- 当Android遇见HTTP缓存代理服务器
- android http请求 史上安卓功能最全的http请求框架(带缓存)
- 转 Centos7下使用Squid快速搭建带认证的HTTP代理服务器
- Centos7下使用Squid快速搭建带认证的HTTP代理服务器
- java写的http代理服务器
- 打造自己的HTTP代理服务器
- 聚来宝 网购达人五大省钱秘笈
- JDBC 大二进制存取
- 设计模式之观察者模式
- http://blog.csdn.net/wuxiaokaixinguo/article/details/8016147
- 最小生成树——Kruskal算法 和 Prim算法
- 带缓存的HTTP代理服务器(五)
- 黑马程序员_【总结】_ Pa_银行业务调度系统
- 数据结构学习笔记4-二叉树搜索树
- 数据库批处理
- 异常:finally块 try catch表现形式
- 类与对象
- 8-3. 组个最小数 (20)
- FPGA机器学习之stanford机器学习第十二堂
- hdu1222 - Wolf and Rabbit(数学:大水题)