304状态码详解(协商缓存)

上一篇文章针对不同的状态码做了一个整理,还说到要专门针对304做一个详解,于是与,今晚又来学习了。

首先说一下背景:

我们知道前端代码打包后需要部署到静态服务器上。客户端通过输入url就能看到对应的页面。从客户端到服务器发送请求到接收资源需要建立连接、消耗宽带。

但是静态资源的更改频率往往没有那么高,于是就有一些专门的response header设置。通过这些设置让浏览器在获取资源文件时直接从本地硬盘或者内存获取,而不必再发送请求。这样也减轻了服务器的负担,同时还加快了客户端的网页加载速度,用户体验好。

设置方式:

1、通过expires(http1时的规范,目前是向下兼容所以有的网站还在用这个):它的值是一个绝对时间的GMT时间字符串。

2、cache-control字段:该字段有几个可选值包括no-cache、no-store、public、private等,这些值决定了能否使用缓存以及缓存的方式。

no-cache时,代表不使用本地缓存,客户端会向服务器发送请求,由服务器决定是否重新获取资源。

no-store时,会完整下载资源

public时:表示资源可以被所有用户缓存,包括服务器

private时表示资源只能被浏览器终端缓存

如果两者同时存在,cache-control优先级更高一些。

当我们发送请求让浏览器进行判断时,客户端和服务器需要一些标识来进行通讯

比如If-Modified-SinceIf-None-Match字段

这两个字段的值通过第一次请求的response header中的last-modified、etag携带过来。

示例

// response header
etag: '5c20abbd-e2e8'
last-modified: Mon, 24 Dec 2018 09:49:49 GMT// request header 变为
if-none-matched: '5c20abbd-e2e8'
if-modified-since: Mon, 24 Dec 2018 09:49:49 GMT

浏览器没有命中强缓存并走协商缓存时就把这些值跟资源文件的信息进行比对。

如果资源没更改,返回304,浏览器读取本地缓存。
如果资源有更改,返回200,返回最新的资源。

至于为什么有etag和last-modified两个字段主要是解决服务器不能精确事件的问题而新增了etag导致的,两个判断相辅相成,具体如何决策看服务器如何处理了

304状态码详解(协商缓存)相关推荐

  1. python接口自动化(七)--状态码详解对照表(详解)

    简介 我们为啥要了解状态码,从它的作用,就不言而喻了.如果不了解,我们就会像个无头苍蝇,横冲直撞.遇到问题也不知道从何处入手,就是想找别人帮忙,也不知道是找前端还是后端的工程师. 状态码的作用是:we ...

  2. HTTP 状态码详解大全 | HTTP Status Codes

    以下是HTTP 状态码详解大全 | HTTP Status Codes" ,来自维基百科,可以按Ctrl+F快速查找需要的信息 1xx消息 这一类型的状态码,代表请求已被接受,需要继续处理. ...

  3. python爬虫常见报错_Python爬虫常见HTTP响应状态码详解

    在使用Python进行网页数据抓取时,经常会遇到无数据返还或错误等异常,这个时候可以通过status_code命令来查看获得http请求返回的状态码,以便查找原因并制定相应的解决方案.import r ...

  4. [转]HTTP协议之状态码详解

    HTTP协议之状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.  如果是做AJ ...

  5. 丁鹿学堂:前端http面试总结,状态码详解

    http请求方法总结 get: 从服务器获取资源 post:在服务器创建资源 put:在服务器修改资源 delete:在服务器删除资源 注意: post和put的最大区别,在于put具有幂等性.比如你 ...

  6. HTTP常见状态码详解(200、403、404、500)

    状态码 一.概述 1xx 信息,表示临时响应并需要请求者继续执行操作 2xx 成功,操作被成功接收并处理 3xx 表示要完成请求,需要进一步操作. 通常,这些状态代码用来重定向 4xx 客户端错误,请 ...

  7. HTTP协议之http状态码详解 300-305 重定向

    HTTP协议之http状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.  如果 ...

  8. http常见状态码详解

    http 中有许多状态码,如果不做些总结,真的很容易搞混,比如,201.404.301.202.504等等.要是一个个记是不是很难记,那么现在总结下规律,来帮助我们记忆 所有的状态码可以分为: 1xx ...

  9. HTTP协议状态码详解(HTTP Status Code)

    HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 ...

最新文章

  1. Android APK应用安装原理(2)-查找APK并自动安装
  2. hdu1435 稳定婚姻问题
  3. 关于如何实现程序一天只启动一次的想法(C++实现)
  4. 总结的linux 基础命令
  5. 【分布式架构】企业级分布式应用服务EDAS使用攻略(上篇)
  6. CentOS 7 设置 DNS
  7. html周报模板,工作周报模板(标准)
  8. colorui开发文档_小程序原生高颜值组件库--ColorUI
  9. 长图PDF如何分页打印?
  10. Lumerical官方案例、FDTD时域有限差分法仿真学习(八)——光纤布拉格光栅(Fiber Bragg gratings)
  11. 母亲节为什么要定在5月的第二个星期日? [节假日]
  12. 如何快速提高Python能力
  13. 小程序名片,让你彻底告别伸手递名片的烦恼!
  14. 让HTML页面也可以实现全屏效果
  15. JQuery中closet、toggleClass、removeClass、addClass理解
  16. Office2016登录的账户名和microsoft账户名不照应的解决方法
  17. ic启动器我的世界_我的世界HMCL启动器
  18. 【Java工具类】(1)—Java中驼峰与下划线相互转换
  19. aplayer php,APlayer for Z-BlogPHP
  20. Something About SCI

热门文章

  1. 大数据就业的三大方向和十种岗位
  2. 去掉 java 安全警告_Win10打开文件时安全警告怎么关闭
  3. 《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第3章 B- CC2530 MQ2 ADC读取烟雾浓度数值
  4. 淘宝618叠猫猫自动逛店铺脚本
  5. 1.12Java-集合
  6. 来自csdn第一博主:成功的背后(给所有IT人)
  7. #Oracle基础-常规操作上
  8. 如何从零开始学习Ruby
  9. 压缩感知——突破香农采样定理
  10. Power Designer:正向构建数据库数据库逆向工程SQL生成数据库报表