http协议(三)缓存头Cache-Control和缓存验证ETag、Last-Modified

本文介绍了HTTP协议中的缓存控制头Cache-Control及其指令,如可缓存性、到期时间、重新验证等。同时讲解了缓存验证机制,包括ETag和Last-Modified的使用,以及如何通过它们确保资源的最新状态。通过实例展示了如何配置服务器以实现资源的缓存与验证。
摘要由CSDN通过智能技术生成

Cache-Control 通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。

Cache-Control指令包含了多个指令,分别具有不同的用途,比如设置缓存权限和缓存时间。

指令格式具有以下有效规则:

  1. 不区分大小写,但建议使用小写。
  2. 多个指令以逗号分隔。
  3. 具有可选参数,可以用令牌或者带引号的字符串语法。

1. 指令

1.1 可缓存性

public
表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存,即使是通常不可缓存的内容。(例如:1.该响应没有max-age指令或Expires消息头;2. 该响应对应的请求方法是 POST 。)
private
表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。
no-cache
在使用缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证)。
no-store
缓存不应存储有关客户端请求或服务器响应的任何内容,即不使用任何缓存。

1.2 到期

max-age=<seconds>
设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。
s-maxage=<seconds>
覆盖max-age或者Expires头,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略它。
max-stale[=<seconds>]
表明客户端愿意接收一个已经过期的资源。可以设置一个可选的秒数,表示响应不能已经过时超过该给定的时间。
min-fresh=<seconds>
表示客户端希望获取一个能在指定的秒数内保持其最新状态的响应。

1.3 重新验证和重新加载

must-revalidate
一旦资源过期(比如已经超过max-age),在成功向原始服务器验证之前,缓存不能用该资源响应后续请求。
proxy-revalidate
与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。

1.4 其他

no-transform
不得对资源进行转换或转变。Content-Encoding、Content-Range、Content-Type等HTTP头不能由代理修改。某些代理服务器可能会对一些资源进行转换,以便节省缓存空间或者减少缓慢链路上的流量。no-transform指令不允许这样做。
only-if-cached
表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝。

2. 使用Cache-Control合理缓存资源

启动以下服务器,当我们访问8888端口时,根据请求路径分别返回一个htnl文件和一个js文件:
Server.js:

const http = require('http')
const fs = require('fs')

http.createServer(function (request, response){
   
  console.log('request url: ', request.url)

  if (request.url === '/') {
   
    const html = fs.readFileSync('index.html', 'utf-8')
    response.writeHead(200, {
   
      'Content-Type': 'text/html'
    })
    response.end(html)
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值