当前位置: 首页 > article >正文

day03|计算机网络重难点之HTTP中常见的状态码、什么是强缓存和协商缓存

day03|计算机网络重难点之HTTP中常见的状态码、什么是强缓存和协商缓存

    • 6.HTTP中常见的状态码有哪些?
    • 7.什么是强缓存和协商缓存

6.HTTP中常见的状态码有哪些?

image-20230811164251602

常用的包括以下几个:

200:表示客户端请求成功

201:创建了新资源。

204 :无内容,服务器成功处理请求,但未返回任何内容。

301:永久重定向

302: 临时重定向

304:请求的内容没有修改过,所以服务器返回此响应时,不会返回网页内容,而是使用缓存

401:请求需要身份验证

403:请求的对应资源禁止被访问

404:服务器无法找到对应资源

500:服务器内部错误

503: 服务不可用

7.什么是强缓存和协商缓存

强缓存和协商缓存是HTTP缓存机制的两种类型,它们用于减少 服务器 的 负担、提高网页加载速度。

1.强缓存:是指浏览器在请求资源时,先检查本地缓存是否存在该资源的副本,且该资源是否有效。如果有效,浏览器直接从本地缓存中获取资源,不需要请求到服务器。

常见的强缓存策略有两种:

  • Expires 强缓存:它是HTTP/1.0协议中的字段,它告诉浏览器 资源过期的时间。当浏览器再次请求该资源时,会先比较当前时间与过期时间。如果未过期则直接使用本地缓存,如果过期则向服务器发出请求。这里有一个巨大的漏洞:”如果本地时间不准怎么办?“,所以目前已经被废弃了。
  • Cache-Control 强缓存:它是HTTP/1.1协议中的字段,它可以设置多个指令来控制缓存行为。常用指令有:max-age、no-cache、no-store等。其中,max-age指令告诉浏览器资源的有效期,no-cache指令告诉浏览器不使用强缓存,而是使用协商缓存

2.协商缓存:是指当强缓存失效的时候,浏览器向服务器发送请求,通过ETag 和 Last-Modified等HTTP响应头,向服务器验证 资源是否已被修改。

如果资源没有被修改,服务器返回 304 Not Modified 状态码,告知浏览器 使用 本地缓存;如果资源被修改了,则服务器返回新的资源,然后浏览器更新本地缓存。协商缓存这种方式需要和服务器进行通信,但是可以确保客户总是能获取最新的资源。

协商缓存 主要有两种:

  • 第一种是基于Last-Modified 的协商缓存:

    • Last-Modified 的含义是 资源 最后被修改的时间,包含在响应头部中
    • 当客户端 读取到 Last-Modified的时候,会在这上面的时间 作为下一次请求中的字段 If-Modified-Since 的值
    • 服务器对比 If-Modified-Since值与当前资源的Last-Modified 值。如果没有变化,表示资源没有被修改,返回状态码 304 Not Modified。如果这个值不同,说明资源已经被修改了,此时服务器会给浏览器正常返回资源并返回200状态
    • 但是这种协商缓存有两个缺点:
      • 因为它是根据文件的修改时间来判断的,但是可能存在文件修改时间已经更新,而文件内容却不变的情况,比如说修改文件名再改回来。这样就会导致文件内容没有改变,但是缓存依然失效
      • 因为它是以秒为单位来记录文件修改时间的,所以文件在几百毫秒内被修改的话,并不会被记录。所以会出现 即使内容被修改了,依然不返回新资源的 情况。
  • 第二种是基于 ETag 的协商缓存:它是指将原来的比较时间戳 改成了 比较文件指纹,也就是 根据文件内容 计算出 唯一的哈希值

    • ETag 就是文件指纹,也就是 该资源的唯一标识符。ETag是根据文件计算出的哈希值,被服务器连同资源一起 发给客户端
    • 客户端 将响应得到的ETag值 放在 请求头部 的 If-None-Match 字段中
    • 服务器比较 请求中的 If-None-Match 值与 当前资源的 ETag 值,如果指纹一致,则说明资源没有发生变化,返回状态码 304 Not Modified。如果指纹不一致,则说明资源已被修改,那么服务器就会将 新的文件指纹 放入 响应头部的 ETag中,最后返回给客户端

如图:

image-20230817150953002


http://www.kler.cn/a/371521.html

相关文章:

  • 音视频入门基础:AAC专题(11)——AudioSpecificConfig简介
  • 651320
  • ES6 变量的解构赋值
  • 《C++音频频谱分析:开启声音世界的神秘之门》
  • 基于神经网络的农业病虫害损失预测
  • Spring Boot驱动的植物健康监测革命
  • 在Facebook运营中使用住宅IP的重要性
  • 您知道Apple公司的大模型(AFM)吗?
  • HTML5 应用程序缓存
  • 深度学习-36-基于PyTorch的卷积神经网络LeNet
  • nrm的使用
  • 移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展
  • Javaee:单例模式
  • ubuntu配置xrdp
  • Robotaxi砍掉的特斯拉市值,财报又赢回来了
  • 在 Node.js 中使用 .env 文件
  • final关键字
  • Azure 将文本转换为语音
  • this指针使用演示(C++)
  • Jetson AGX Orin 实现相机雷达联合标定
  • 用sdcc给51单片机编译C程序
  • 绿色制造中的 FMEA 系统的应用_SunFMEA软件
  • iOS Swift5算法恢复——HMAC
  • 『大模型笔记』如何在无网路的情况下在Linux主机上安装NVIDIA Container Toolkit(nvidia-docker2)
  • Nginx、Lua 和 Redis 架构来实现 IP 黑名单
  • 大话网络协议:HTTPS协议和HTTP协议有何不同?为什么HTTPS更安全