博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简述HTTP协议报文首部缓存机制
阅读量:6572 次
发布时间:2019-06-24

本文共 1292 字,大约阅读时间需要 4 分钟。

http缓存原理与机制

强制缓存机制(过期时间机制):

基本原理:在客户端第一次请求服务端时,服务端会将缓存规则信息添加在header中,客户端会通过这些信息判断是否能缓存。若是强制缓存,则header中会有两个字段来标记缓存失效的时间(expires或cache-control),要指出的是在HTTP1.0中,只支持expires,目前的浏览器默认都是HTTP1.1了,基本都支持cache-control。在客户端第一次请求并添加缓存后,以后每次客户端的请求响应数据都是缓存服务器提供的,不会再经由服务端。缓存服务器根据cache-control字段来判断何时更新缓存,是否更新缓存,是否可以使用缓存。
cache-control有下面几个参数:
private,允许客户端使用缓存
max-age,缓存最大失效时长
public,允许客户端和代理使用缓存
no-cache,关闭强制缓存,需要使用对比缓存
no-store,所有内容都不使用缓存
请求报文首部和响应报文首部都有cache-control
对比缓存机制(条件式缓存机制):
基本原理:
1.缓存命中的情况:客户端会向缓存服务器请求获取缓存header标识,客户端获取标识后,会向后端服务器发送header标识规则,若未失效便通知客户端使用缓存服务器缓存的数据(一般状态码为304)。值得注意的是在客户端获取header标识后只会向后端服务器发送header,服务端也只会向客户端返回header。
2.缓存未命中的情况:客户端会向缓存服务器请求获取缓存header标识,客户端获取标识后,会向后端服务器发送header标识规则,若失效便通知客户端不使用缓存服务器缓存的数据(一般状态码为200),并更新缓存。
对比缓存的标识:
last-modified/if-modfied-since:资源最后修改时间戳
etag/if-none-match:资源校验码,可以是类似hash值的算法(优先级高于last-modified)
不管是以上哪一种都是为了比对当前缓存内容和后端服务器最新内容是否一致的。若返回值为304则认为是一致,则直接使用缓存;若返回值是200则认为是不一致,则更新缓存。

缓存方式:

1.代理式缓存:当用户发送请求时,会先经由缓存服务器,若缓存命中便直接返回给客户端,若没命中则由缓存服务器向后端主机发送请求并相应给客户端,再由缓存服务器判断是否缓存响应的内容。
2.旁挂式缓存:当用户发送请求时,会先经由缓存服务器,若缓存命中便直接返回给客户端,若没命中则由客户端自己向后端主机发送请求并相应给客户端,再由客户端判断是否缓存响应的内容。

varnish是一款代理式缓存程序,降低了客户端的要求,客户端不需要判断哪些内容需要缓存哪些不需要缓存,增强了用户体验。现在一般都是使用代理式缓存模型。

varnish的缓存存储机制:

-s
malloc
file
persistent (测试阶段,还未有正式版)

转载于:https://blog.51cto.com/13322786/2169173

你可能感兴趣的文章
用tinypng插件创建gulp task压缩图片
查看>>
浅谈DOMContentLoaded事件及其封装方法
查看>>
BetaMeow----利用机器学习做五子棋AI
查看>>
APM终端用户体验监控分析(下)
查看>>
React Native 0.20官方入门教程
查看>>
JSON for Modern C++ 3.6.0 发布
查看>>
Tomcat9.0部署iot.war(环境mysql8.0,centos7.2)
查看>>
Powershell进阶学习(6) 部署 Windows PowerShell Web 访问
查看>>
以身试法MTU
查看>>
基于CentOS7.3构建企业级Vsftpd文件服务器
查看>>
使用ApexSQL Log 分析数据库在线日志及数据库备份
查看>>
技术分享连载(八十六)
查看>>
清除vlan.dat文件
查看>>
Android 面试常问七道题
查看>>
TestNG介绍 - 1
查看>>
当前用户更改运行方式出现错误的解决办法
查看>>
visual studio 11开发Win8模板
查看>>
Linux下VsFTP和ProFTP用户管理高级技巧 之一
查看>>
Xamarin 技术全解析
查看>>
mySQL用户和权限管理v1
查看>>