《HTTP权威指南》读书笔记(一):初探缓存
来源:互联网 发布:考研英语网络课 编辑:程序博客网 时间:2024/06/11 12:07
缓存的原理:
客户端向服务器发送一个请求时,会在本地保存返回的内容(HTML页面、图片、文件等);当下次用同一个URL访问时,如果本地有缓存,请求就不会到达服务器,会直接使用本地副本来构建响应。
缓存的四大好处:
1. 减少冗余的数据传输;
eg:当你重复访问同一个网页时,有了缓存,不需要在网络中再次传输所需要的网页数据,可以直接从本地缓存获取。
2. 缓解网络带宽的瓶颈;
eg:还是在你重复访问同一个网页时,有了缓存,不需要太多的带宽就可以直接从缓存中加载显示。
3. 减轻服务器的压力,特别是网络拥塞的情况下;
eg:当大量用户同时访问同一个服务器(举个栗子:发生爆炸型新闻)时,会造成瞬间拥塞,这可能会使服务器瞬间崩溃,有了缓存,请求根本不会抵达服务器啦。
4. 减小距离时延;
eg:访问同一个网页时,当然是距离服务器越近的人,访问时延越小,有了缓存,不需要服务器返回数据,成功缓解这一时延。
缓存的处理步骤
1.接收:缓存从网络中读取抵达的请求报文
2.解析:解析出请求中的URL和各种首部等
3.查询:查询本地是否有缓存的副本可用,如果没有,就缓存一份副本在本地
- 缓存命中:本地有可用的副本,直接返回给客户端请求
- 缓存未命中:本地没有可用的副本,就继续向服务器发送请求,并将服务器的返回保存一份副本在本地
4.新鲜度检测(HTTP再验证):检测本地缓存的副本是否过期,如果过期,就向服务器发送请求询问是否有任何更新(再验证过程)
文档过期
- HTTP/1.0 过期日期(Expires:data ):保存的是绝对的过期日期,存在漏洞:通过修改本地时间来使缓存过期
- HTTP/1.1 使用期(Cache-Control:max-age ):保存的是过期的相对时长,max-age 定义了文档的最大使用期
条件方法再验证
- If-Modified-Since(IMS):< cached last-modified date >(最常见)
- 如果在缓存期间内容被修改了,最后的修改日期会不同,服务器会返回带有新主体的200 OK响应
- 如果没被修改,最后的修改日期和服务器文档的最后修改日期符合,会返回304 Not Modified响应
- If-None-Match:实体标签(版本标识符ETag)再验证
- 有些情况:文档可能被周期性重写或被修改的部分不太重要,此时采用IMS就不合适了,改采用INM
- 如果服务器上的实体标签发生了变化,采用带有If-None-Match的请求来get文档,会得到带有新内容+新ETag的200 OK响应
- 未变化,则获得304 Not-Modified响应
- 强弱验证器:If-None-Match:W/ETag
- 面向当对某些文档做了非实质性的修改而不需要所有已缓存副本都失效的情况
- 其他类似If-None-Match方式
- 条件方法验证的总结:
- 再验证命中:返回HTTP 304 Not Modified响应
- 再验证未命中:返回HTTP 200 OK响应
- 对象被删除:返回404 Not Found响应
- If-Modified-Since(IMS):< cached last-modified date >(最常见)
5.缓存创建响应:缓存使用新的首部+已缓存的主体构建一条响应报文
6.发送:缓存通过网络将响应报文发送给客户端
7.日志:可选地创建日志文件
0 0
- 《HTTP权威指南》读书笔记(一):初探缓存
- 《HTTP权威指南》读书笔记---缓存
- http权威指南读书笔记(一)
- 《HTTP权威指南》读书笔记(一)
- 《HTTP权威指南》读书笔记(4)-缓存
- HTTP权威指南读书笔记一:HTTP简介
- 《HTTP权威指南》读书笔记
- http权威指南读书笔记
- HTTP权威指南读书笔记
- http权威指南 读书笔记
- HTTP权威指南(读书笔记) 1
- HTTP权威指南(读书笔记)2
- 《HTTP权威指南》读书笔记(二)
- http权威指南(一)-Http概述
- 《sqlite权威指南》读书笔记 (一)
- git权威指南读书笔记(一)
- 《css权威指南》--读书笔记(一)
- JavaScript权威指南读书笔记(一)
- Modern PHP笔记
- 大整数排序
- 编写gSoap XML/RPC程序时出现“soapStub.h: error: redefinition of parameter ‘soap’”
- Connection to localhost:5432 refused. Check that the hostname and port are correct and that the post
- Linux下使用popen()执行shell命令
- 《HTTP权威指南》读书笔记(一):初探缓存
- 二叉树的后序遍历
- 动手写window程序
- @Retention注解
- 一个测试任务并发执行时间的方法
- Java8中的forEach方法详解
- 使用feign调用restful服务
- 什么是java的反射
- Unity Input