面试准备—(超详细)Http缓存机制与状态码

一、Http缓存机制

我们经常说这个页面有缓存!这个Css有缓存!我们如果打开控制台,也经常看到有个叫做Cache-Control的字段,但是这个字段里有很多种类的值,有很多同学不明白这些值都是什么意思~

这些值不但在实际中会经常用到,而且在面试中也会经常被提起,那么今天我们就来一起看一下这些值的含义吧~
在这里插入图片描述

其实cache-control里的字段分为两类,一类是RequestHeader中使用的,另一类是ResponseHeader中使用的,我们最常见的或者说和前端最相关的就是ResponseHeader中使用的cache-control

1.参数

有请我们耳熟能详的小明同学,以小明吃药的例子,来为大家解释ResponseHeader中的Cache-Control的各种值~

小明的近况可以用一句话来形容,那就是“浪多人变傻”。有一天小明忽然发现自己的脑子不够用了。于是决定买点药,不能让这种情况进一步恶化下去~

于是小明去了药店,药店的医生见了小明,顿时大喜道:“呀,小明来啦!今天想吃点啥?”小明向药店医生描述了自己的情况之后,药店的医生推荐给小明本店的招牌【脑残片】。我们的故事就是从这开始的~

这时我们可以把小明比作浏览器,药店比作服务器,药店医生比作服务器的代理,脑残片就是要请求的资源,比如一个动作片之类的~

  1. max-age
    小明有个怪癖,买回来超过七天就不吃了,就得买新的。(就算没过期也不吃了,如果过期那更不吃了)

这就是max-age的作用,缓存的资源,超过一定时间就不要了,就要重新请求。如果买回来的时间是1号,脑残片的过期时间是5号,虽然小明能接受药在自己家放7天,但是因为5号就过期了,所以小明5号之后还是要重新去买的。max-age后面通常跟着一串数字,表示缓存的秒数。

  1. max-stale
    有时小明也是很节俭的,有的东西过期几天也是会吃的(六味地黄丸?)。

这就是max-stale的作用,过期一点时间无所谓,也能用。max-stale后面也跟着秒数,表示过期多长时间的东西也可以继续使用。
max-stale多数的时候会跟着max-age一起使用。如果脑残片是1号买的,小明最多保留7天(到7号),但是脑残片5号过期,如果max-stale=4的话,就意味着小明可以接受过期4天之内的脑残片。
也就是相当于小明认为脑残片9号之后才不能吃。但是小明最多只能容忍药放在家里7天,所以8号的时候小明会去重新买药(重新请求资源)。

  1. no-cache
    小明有时候谨慎起来也是很抽风的,每次吃药之前都要先去药店,让医生看一下药还能不能吃。万一哪批药有问题被召回了呢~(Ps:你懂的)

这就是no-cache的作用,no-cache不会直接使用缓存,而是每次使用资源之前,都要先向服务器询问一下这个资源还能不能用,如果能用就继续用,如果不能用就重新请求。

  1. no-store
    有时候小明也是很土豪的,每次吃药都要新买一瓶。每次都吃新的。(最早的时候,小明的手机也是,每次没电都买个新的,后来才知道手机居然可以充电。。。)

这就是很no-store,很土豪的做法,每次都要向服务器请求资源。如果所有的资源都这样会对服务器造成很大的压力,所以我们对于那种对数据时效很敏感的数据,才会做这样的操作。

  1. public
    小明家里有好多脑残片,由于小明经常去买脑残片,所以一进药店医生就会开玩笑道:“又来买脑残片啦?”

public表示缓存可以被任何地方缓存,药店是服务器,医生相当于是代理服务器,药店的医生都能知道小明要买脑残片,证明代理服务器已经缓存了小明要买的东西。所以public表示任何地方都可以缓存资源

  1. private
    有的医生也是很严肃的,不会每次都和小明开玩笑。所以有的时候小明去药店,医生会很有礼貌并面带微笑的问小明:“今天想买什么~?”

private的意思就是只指允许客户端进行缓存,代理服务器不能缓存这个资源。

  1. must-revalidation
    有的时候,小明比较忙,明嫂也会给小明备着点药。当明嫂手里的药过期的时候,明嫂也会去药店买药。

小明和明嫂相当于同一个浏览器中的两个窗口。max-age和must-revalidation都是本地过期之后去服务器端重新请求资源。但是区别在于,如果用max-age,那么如果资源没过期,新开的窗口也会使用这个资源。如果是must-revalidation,每次新打开窗口,都会向服务器去请求资源。

  1. no-transform
    小明的脑残片是进口的,标签上都是英文,有时药店医生担心病人不认识药瓶上的字,会把字翻译过来写在标签上,然后贴上去。但是如果生产厂家要求,不能在中途对资源做任何修改操作,药店医生就不会给药瓶贴标签了~。

通常当传输图片或者资源时,有时代理服务器为了有更好的性能,会对图片或者资源进行压缩,或者格式的转换。但是如果在响应头中带有这个字段,就表示这不允许在传输的中途对资源做任何修改。

2.动作

除了以上这些参数的作用会被经常问到之外,还会经常问到浏览器对于这些参数的相关响应,不同的参数加上不同的操作会产生不同的动作。我们可以通过下面的表格看到具体会发生什么动作。
在这里插入图片描述

二、Http状态码
在这里插入图片描述

1. 2XX 请求成功

2XX 的响应结果表明请求被正常处理了。

1. 200 OK

200表示请求在服务器端被正常处理了。在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。

2. 204 No Content

204表示服务器接收的请求已经成功处理,但是在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。当浏览器在发送请求后接收到204响应,它的显示页面不会发生更新。

通常应用在只需要客户端往服务端发送信息,而服务端不需要发送新信息的情况下使用。

3. 206 Partial Content

206表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文内包含由Content-Range指定范围的实体内容。

2. 3XX 重定向

3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

1. 301 Moved Permanently

永久重定向,301状态码表示请求的资源已经分配了新的URI,以后请求该资源应该访问新的URI。也就是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。

2. 302 Found

临时重定向,302表示请求的资源已经被分配了新的URI,希望客户端本次能使用新的URI访问。和301不同的是,这种资源的URI变更是临时的额,而不是永久的,因此不用去更新书签。

3.303 See Other

该状态码和 302 有着异曲同工之妙,表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。

如果浏览器原本是用POST方法去请求服务器,收到303状态码之后,会改用GET并访问资源新的URI。

4. 304 Not Modified

304 状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。

PS:附带条件的请求是指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部。

5. 307 Temporary Redirect

临时重定向,和 302 Found 状态码有相同的含义。区别在于 307 不会强制浏览器将 POST 方法改为 GET 方法,而是遵循浏览器自身的标准。

3. 4XX 客户端错误

4XX 的响应结果表明客户端是发生错误的原因所在。

1. 400 Bad Request

400 状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。

2. 401 Unauthorized

401 状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。第一次收到 401 状态码表示需要进行用户认证,第二次再收到 401 状态码说明用户认证失败。

3. 403 Forbidden

403 状态码表明对请求资源的访问被服务器拒绝了,当未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能发生 403 。

4. 404 Not Found

404 是我们最常见的状态码之一,它表示服务器上无法找到请求资源。此外,也可能是服务器端在拒绝请求且不想说明原因的时候使用。

4. 5XX 服务器错误

5XX 的响应结果表明服务器本身发生错误。

1. 500 Internal Server Error

500 状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。

2. 503 Service Unavailable

503 状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值