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

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

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

常用的包括以下几个:

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中,最后返回给客户端

如图:

相关推荐
阿华的代码王国1 小时前
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
网络协议·http·https·非对称加密·对称加密·htttps加密传输·证书加密
Xzzzz9111 小时前
华为配置 之 STP
服务器·网络·计算机网络·华为
FIN技术铺3 小时前
问:缓存穿透、雪崩、预热、击穿、降级,怎么办?
数据库·spring·缓存
小龙4 小时前
【Python爬虫实战】网络爬虫完整指南:HTTP/HTTPS协议与爬虫安全实践
爬虫·python·http
C_player_00110 小时前
HttpContext模块 --- http上下文模块
linux·服务器·网络·网络协议·http
IsToRestart12 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
ZachOn1y13 小时前
计算机网络:网络层 —— 网络层(网际层)概述
网络·计算机网络·网络层·1024程序员节
找了一圈尾巴13 小时前
架构师备考-计算机网络
计算机网络·系统架构
Pandaconda14 小时前
【计算机网络 - 基础问题】每日 3 题(五十七)
开发语言·网络·经验分享·笔记·后端·计算机网络·面试
瑕、疵14 小时前
深入解析HTTP与HTTPS的区别及实现原理
网络协议·http·https