在CGI中通过Etag和Cache-Control来控制流量,访问量及生效时间
最近遇到一个需求,即一个配置文件,由于这个文件的访问量非常大(8000次/秒),并且配置文件本身也比较大,所以需要
1.发布之后在5分钟之内生效
2.要能够cache,并尽量减少请求量和流量
对于以上的需求进行分析,首先否定掉放到CDN上,因为虽然第二点满足,但是第一点没法满足。
那么只能通过cgi读取配置文件返回内容来实现,具体方法如下:
1.发布之后5分钟生效
使用Etag,在这里即为配置文件的md5值,当来的请求的Etag值和服务器上的版本不一致时,才返回数据,并设置新的Etag;否则,返回304
2.能够cache
使用Cache-Control,来设定cache的时间
从而,使用Etag减少了流量,使用cache减少了请求量,并且同时兼顾了数据的更新时间可控。
示例代码如下:
返回304:
void CAppBaseConf::PrintHttp304()
{
std::string v = "HTTP/1.1 304 Not Modified\r\nServer: qzhttp\r\n";
printf("%s",v.c_str());
CCGIEx:: OutputHttpHeader();
return;
}
返回正常数据并设置Etag:
int CAppBaseConf::SetEtag(std::string &etag)
{
if(etag.size() <= 0)
return 0;
printf("Etag: %s\r\n",etag.c_str());
return 0;
}
服务器抓包截图如下:
304返回:
HTTP/1.1 304 Not Modified
Server: qzhttp
Content-Type: text/html; charset=utf-8
Connection: keep-alive
正常返回:
HTTP/1.1 200 OK
Server: QZHTTP-2.12
Date: Thu, 22 Jul 2010 10:24:15 GMT
UUID: 2872113653
Content-Length: 35
Etag: 2
Cache-Control: max-age=1800
Content-Type: text/html; charset=utf-8
Connection: keep-alive
_Callback(
{"ret":0,
"flag":"2"});
可以看出,确实是生效了。
建议继续学习:
- QQ上传大文件为什么这么快 (阅读:12363)
- Linux下三种常用的流量监控软件对比 (阅读:8694)
- 脚本利用SNMP mib/oid分析网卡流量 (阅读:7007)
- nicstat 网络流量统计利器 (阅读:6420)
- cacti+apache+php+mysql+rrdtool搭建流量监控平台 (阅读:5738)
- PHP处理Etag、lastModified和Expires (阅读:5118)
- 通过shell 脚本查看服务器的时时流量 (阅读:4287)
- 你的服务器能承受多大流量 (阅读:3771)
- 网络流量监控软件vnStat (阅读:3774)
- linux单机根据ip查看流量 (阅读:3304)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: Cache-Control Etag 流量
- 发布时间:2010-07-22 20:00:28
- [46] 界面设计速成
- [43] 视觉调整-设计师 vs. 逻辑
- [43] Oracle MTS模式下 进程地址与会话信
- [42] IOS安全–浅谈关于IOS加固的几种方法
- [42] android 开发入门
- [39] 图书馆的世界纪录
- [38] 程序员技术练级攻略
- [38] 【社会化设计】自我(self)部分――欢迎区
- [38] 如何拿下简短的域名
- [34] 读书笔记-壹百度:百度十年千倍的29条法则