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

如图:

相关推荐
云计算DevOps-韩老师32 分钟前
【网络云计算】2024第48周-每日【2024/11/20】小测-理论题-计算机网络概述
计算机网络·网络设备
Hello Dam1 小时前
【计算机网络】物理层
计算机网络·物理层
_Power_Y3 小时前
计算机网络:应用层知识点概述及习题
计算机网络
co0t3 小时前
计算机网络(14)ip地址超详解
服务器·tcp/ip·计算机网络
C++忠实粉丝3 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
煎饼小狗4 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
吃土少女古拉拉4 小时前
什么是计算机网络
计算机网络·学习笔记
C++忠实粉丝5 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
雯0609~6 小时前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
菠萝咕噜肉i8 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁