博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
http缓存知识
阅读量:6293 次
发布时间:2019-06-22

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

http缓存

根据是否需要向服务器发起请求,http缓存可以分为强制缓存协商缓存

强制缓存是指如果缓存没有过期,客户端不会向服务器发起请求询问缓存的有效性,直接读取缓存数据。与强制缓存相关的两个http响应头分别是ExpiresCache-Control
协商缓存需要客户端与服务端发生交互,客户端发送本地缓存的标识,由服务端根据标识决定缓存是否有效。 两类缓存同时存在时,强制缓存优先级较高。

强制缓存

Expires

Expires头部对应的值是服务器设置的资源过期时间,浏览器根据这个时间来判断缓存是否失效,但是服务器的时间常常与客户端的时间有误差,这种判断并不可靠,所以Expires现在很少使用(Expires属于HTTP 1.0)。

Expires:Sat, 20 Aug 2016 01:40:57 GMT复制代码

Cache-Control

响应头与请求头都支持这个属性。通过设置不同的值定义缓存策略。

  1. 禁止进行缓存

缓存中不会存储响应内容

Cache-Control:no-store复制代码
  1. 公共缓存

'public'表示该响应可以被中间人缓存(中间代理、CDN等),默认是私有缓存'private'

Cache-Control:public复制代码
  1. 私有缓存

'private'表示该响应是专用于某用户的,中间人不能缓存此响应

Cache-Control:private复制代码
  1. 缓存时间

'max-age={seconds}'表示缓存将在seconds秒后失效

Cache-Control:max-age=1000000复制代码
  1. 协商缓存

'no-cache'表示客户端必须每次询问服务端缓存是否失效,从而决定是否使用缓存内容

Cache-Control:no-cache复制代码

协商缓存

协商缓存策略下,即使本地有缓存数据,客户端任然会向服务端发送一个请求,并且携带本地缓存的标识,服务端通过这个标识来判断缓存是否过期,如果缓存过期,返回新的数据;如果没有过期,返回304状态码告知客户端可以继续使用缓存。缓存的标识可以通过两种方式来传递。

  1. 方式一:Last-Modified响应头和If-Modified-Since请求头

响应头Last-Modified的值是服务端返回的资源最后修改时间,这个值将在下一次客户端请求时作为请求头If-Modified-Since的值发送给服务端,服务端对比这个值与资源的最近一次修改时间,从而决定缓存是否过期。

# requestIf-Modified-Since: Thu, 28 Jun 2018 12:12:38 GMT# responseLast-Modified: Thu, 28 Jun 2018 12:12:38 GMT复制代码
  1. 方式二:ETag响应头与If-None-Match请求头

响应头ETag的值是服务端返回的资源的唯一标识(资源一旦修改,该标识就会变化),这个值将在下一次客户端请求时作为请求头If-None-Match的值发送给服务端,服务端进行对比后决定缓存是否过期。

# requestIf-None-Match: W/"2a9-164464f492d"# responseETag: W/"2a9-164464f492d"复制代码

一般来讲ETagLast-Modified可能同时存在,但是ETag的优先级会更高。

转载地址:http://nstta.baihongyu.com/

你可能感兴趣的文章
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
基于RBAC权限管理
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>