参考:

http://muchstudy.com/2016/08/18/HTTP%E7%BC%93%E5%AD%98%E8%AF%A6%E8%A7%A3/

https://aotu.io/notes/2016/09/22/http-caching/

http://www.cnblogs.com/chenqf/p/6386163.html

一、HTTP缓存

  • 强制缓存
  • 协商缓存(对比缓存)

1、强制缓存

名称 说明
Expires 响应失效的日期和时间。类似于:Expires:Sat, 20 Aug 2016 01:40:57 GMT,绝对值,告诉客户端在这个时间点之后资源过期,需要重新从服务器取。
Cache-Control 类似于:Cache-Control:max-age=315360000,相对值,在多久后过期

通过上面两种方式,当资源的缓存还在有效期时,浏览器直接从本地缓存中取资源,而不是发起HTTP请求从源服务器取。由于客户端与服务器端存在时间差,Expires并不是那么的靠谱,所以建议使用max-age。

2、协商缓存

名称 说明
If-Modified-Since \ Last-Modified 告诉服务器只要服务器在这个时间之后又对资源做了修改则发送该资源
If-None-Match 与 ETag 根据资源内容是否变更来判断是否继续使用本地缓存。第一次请求资源时,服务器在response头信息中设置ETag,当资源过期后再次向服务器请求时用If-None-Match:ETag去验证资源是否变更

静态资源

  • JS

  • CSS

  • 图片

  • 二进制文件

    在文件或者路径中嵌入指纹,避免使用查询字符串。确保生成的URL长度超过8个不通的字符。

    使用这些HTTP响应头:

    1. Cache-Control: public, max- age=31536000
    2. Expires: (一年后的今天)
    3. ETag: (基于内容生成)
    4. Last-Modified: (过去某个时间)
    5. Vary: Accept-Encoding

动态资源

使用如下响应头:

  1. Cache-Control: public, max-age=0
  2. Expires: (当前时间)
  3. ETag: (基于内容生成)
  4. Last-Modified: (过去某个时间)
  5. Vary: Accept-Encoding

二、总结

  • 对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。

  • 对于比较缓存,将缓存信息中的EtagLast-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

浏览器第一次请求:

enter image description here

浏览器再次请求时:

enter image description here

HTTP缓存初识的更多相关文章

  1. Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  2. 安卓高级 Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  3. 初识Hibernate 缓存

    生活就像一杯咖啡,让你我慢慢的品尝,品尝它的苦涩和甘甜...... 一.什么是Hibernate缓存. 解析:白话来说就是缓存数据的容器 官方标准点缓存:是计算机领域的概念,它介于应用程序和永久性数据 ...

  4. 初识缓存以及ehcache初体验

    1.缓存的意义 缓存机制就是将数据库中经常使用的数据取出放入内存中.程序调用时直接从内存中取,丌用每次使用  数据都訪问数据库,这样提高了效率. 2.缓存须要关注的问题 1)  缓存的更新 缓存中的数 ...

  5. nginx平台初识(二) 浏览器 HTTP 协议缓存机制详解

    1.缓存的分类 缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧(client side,比如 web browser). 服务端缓存又分为 代理服务器缓存 和 反 ...

  6. 26. SpringBoot 初识缓存及 SimpleCacheConfiguration源码解析

    1.引入一下starter: web.cache.Mybatis.MySQL @MapperScan("com.everjiankang.cache.dao") @SpringBo ...

  7. 初识nginx反向代理和缓存机制

    实现的需求图:   环境: nginx缓存和反向代理服务器:192.168.0.224 实际存储数据机器:192.168.0.37 一.实现反向代理 1.安装nginx,两台服务器都需要安装 1)安装 ...

  8. Android图片缓存之初识Glide(三)

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  9. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

随机推荐

  1. python内置下载服务器

    python内置了一个下载服务器.例如你的同事要让你传的文件位于某一个目录下面,那么你可以进入这个目录,然后执行下面的命令启动一个下载服务器 python2 python -m SimpleHTTPS ...

  2. 在docker容器中为elasticsearch配置跨域访问

    一.在docker容器中进入elasticsearch对应的容器 docker exec -it [容器名] /bin/bash 二.安装vim编辑器 因为我们需要更改配置文件,安装过的朋友就不用安装 ...

  3. initlocation - 创建一个从属的 PostgreSQL数据库存储区

    SYNOPSIS initlocation directory DESCRIPTION 描述 initlocation 创建一个新的PostgreSQL从属数据库存储区.参阅 CREATE DATAB ...

  4. Github删除仓库文件夹问题集合

    记得上次使用GitHub,看时间提示,最近的一次,是三年前,而且都是长传文件,这次是删除文件,才发现删除库可以,但是删除库里的某个目录,就不行了,除非是下载下来,在GitHub把仓库删了重新添加.使用 ...

  5. ACR095 删一个求中位数 贪心求最大组合数 行列变换模拟(搜索)

    A B #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #d ...

  6. json格式字符串转字典

    //json格式字符串转字典+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {        if (jsonStr ...

  7. linux上开启和分析mysql慢查询日志

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  8. Python修炼之路-异常

    异常处理 在程序出现bug时一般不会将错误信息直接显示给用户,而是可以自定义显示内容或处理. 常见异常 AttributeError # 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性 ...

  9. 【NOIP2016提高组复赛day2】天天爱跑步

    题目 小 C 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏. <天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵 ...

  10. kafka伪分布式安装(2.12版)

    1.下载并解压. tar -xvf  kafka_2.12-1.0.0.tgz 2.进入config目录修改server.properties文件. log.dirs=/tmp/kafka-logs ...