什么是HTTP缓存?

yizhihongxing

HTTP缓存指的是缓存HTTP请求和响应内容,以减少网络请求和数据传输的次数,加速网页载入和提高用户体验。缓存可以在客户端浏览器和服务器之间建立,而缓存的机制可以通过HTTP头部来控制。

HTTP缓存机制通常分为两种方式:强缓存和协商缓存。

一、强缓存

强缓存使用“Cache-Control”和“Expires”两个响应头来实现。这两个头部可以让客户端告诉服务器,对于资源的请求,在一段时间内具备“强制缓存”,不需要再向服务器发送请求验证是否有更新,而直接从浏览器缓存中读取资源并加载。

1、Cache-Control响应头

Cache-Control响应头是控制缓存的最重要的响应头之一。它可以设置多个指令,常用指令及其作用如下:

•private:客户端可以缓存该资源,但不能代理缓存;

•public:客户端和代理服务器都可以缓存该资源;

•max-age:资源可以被缓存的最大时间,单位为秒;

•no-cache:需要与服务器验证缓存,但不需要返回新结果;

•no-store:不缓存响应的任何部分。

例如,设置缓存90秒:

Cache-Control: max-age=90

2、Expires响应头

Expires响应头也是控制缓存的响应头之一,但它不能控制缓存过期的精确时间,而只能设置缓存的过期时长,单位是秒。该头部一旦出现,浏览器就会自动在缓存中缓存该资源,直到过期时间到来。

例如,设置过期时间为30秒:

Expires: Wed, 20 May 2021 18:38:57 GMT

二、协商缓存

协商缓存是通过“ETag”和“Last-modified”来实现。当协商缓存生效时,浏览器不是直接从缓存中读取资源,而是向服务器发送请求并带上“ETag”和“Last-modified”两个值,让服务器对比资源的版本是否有更新,如果没有,服务器会返回状态码“304 Not Modified”,告诉浏览器继续使用缓存中的数据。

1、ETag响应头

服务器返回的ETag响应头是根据资源内容生成的唯一标识符,用于标识资源版本,每次更新资源就会生成一个新的ETag值。当浏览器向服务器再次请求同一个资源时,会带上上次返回的ETag值,让服务器对比资源是否有更新。

例如:

ETag: "5bb4-5f5c5b5b5c5c5"

2、Last-Modified响应头

服务器返回的Last-Modified响应头是资源最后一次被修改的时间,当浏览器向服务器再次请求同一个资源时,会带上上次返回的Last-Modified时间戳,让服务器对比资源是否有更新。

例如:

Last-Modified: Mon, 13 Apr 2020 12:43:56 GMT

示例:

以检索数据接口中,对返回结果进行缓存的方式为例:

// 设置缓存90秒
Cache-Control: max-age=90

// 生成ETag值
ETag: "5bb4-5f5c5b5b5c5c5"

// 返回修改时间
Last-Modified: Mon, 13 Apr 2020 12:43:56 GMT

当进行数据检索时,客户端发送请求时会携带上次响应返回的ETag值和Last-Modified时间戳:

If-None-Match: "5bb4-5f5c5b5b5c5c5"
If-Modified-Since: Mon, 13 Apr 2020 12:43:56 GMT

服务器会对比缓存的资源版本和请求中的值,如果资源没有更新,则返回状态码“304 Not Modified”,客户端直接使用缓存中的数据,否则返回新的数据。

以上就是HTTP缓存的详细介绍。缓存是Web性能优化的重要手段,能够大大提高网站的性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:什么是HTTP缓存? - Python技术站

(0)
上一篇 2023年4月28日
下一篇 2023年4月30日

相关文章

  • Tomcat10配置端口号为443(使用https访问)

    首先需要确保服务器上已经安装了Java环境和Tomcat10。 下面是Tomcat10配置端口号为443(使用https访问)的步骤: 步骤一:创建Keystore 使用keytool生成证书。在命令行中键入以下命令: keytool -genkey -alias tomcat -keyalg RSA -keystore /path/to/keystore …

    http 2023年5月13日
    00
  • SpringBoot启动访问localhost:8080报错404的解决操作

    以下是“SpringBoot启动访问localhost:8080报错404的解决操作”的攻略,其中包含两个示例: SpringBoot启动访问localhost:8080报错404的解决操作 问题描述 在使用SpringBoot启动应用时,访问localhost:8080时出现404错误。 解决方案 方案1:检查控制器 首先,需要检查控制器是否正确。在该问题…

    http 2023年5月13日
    00
  • 关于maven打包时的报错: Return code is: 501 , ReasonPhrase:HTTPS Required

    以下是关于“关于maven打包时的报错:Returncodeis:501,ReasonPhrase:HTTPSRequired”的完整攻略: 简介 在使用maven进行打包时,时会遇到Returncodeis:501,ReasonPhrase:HTTPSRequired的报错。这个问题通常是由于maven仓库使用了协议,maven配置文件中没有配置HTTPS…

    http 2023年5月13日
    00
  • 如何解决HTTP重定向异常问题?

    HTTP重定向异常问题常常发生在使用HTTP协议访问网站时,可能会遇到无法访问目标网页的情况,而此时会出现HTTP响应码为3XX(重定向)的情况。这时候我们需要通过解决HTTP重定向异常问题才能够正常地访问目标网站。以下是解决HTTP重定向异常问题的攻略: 1. 确认目标网站的HTTP重定向状态 HTTP重定向状态是指目标网站是否支持HTTP重定向,通常情况…

    云计算 2023年4月27日
    00
  • 如何使用RequestHeaders添加自定义参数

    当我们使用HTTP请求时,有时需要添加自定义参数到请求头中,以便服务器能够正确处理请求。这可以通过使用RequestHeaders来实现。以下是如何使用RequestHeaders添加自定义参数的完整攻略: 打开开发者工具:在浏览器中打开需要添加自定义参数的网页,然后按下F12键打开开发者工具。 打开Network选项卡:在开发者工具中,选择Network选…

    http 2023年5月13日
    00
  • 什么是HTTP代理服务器?

    HTTP(Hyper Text Transfer Protocol)代理服务器是一种计算机网络服务,它在客户端和目标服务器之间担任中间人的角色。通过该服务,客户端的HTTP请求会首先发送到代理服务器,然后由代理服务器再将请求发送到目标服务器,并将响应返回给客户端。 HTTP代理服务器主要用于以下3个方面: 隐藏客户端真实IP地址:客户端发出的请求将被代理服务…

    云计算 2023年4月27日
    00
  • Spring使用注解存储和读取对象详解

    Sure,下面是“Spring使用注解存储和读取对象详解”的完整攻略。 什么是Spring注解 Spring注解是一种注入Bean的方式,与xml配置方式相对应,将对象的创建和属性赋值的过程放在注解中完成。Spring注解可以大大简化xml配置,提高代码可读性。 Spring使用注解存储和读取对象 使用Spring框架,我们可以使用注解将Java类存储到Sp…

    http 2023年5月13日
    00
  • 解决python多线程报错:AttributeError: Can’t pickle local object问题

    以下是关于“解决python多线程报错:AttributeError:Can’tpicklelocalobject问题”的完整攻略: 简介 在使用Python进行多线程编程时,有时会到“AttributeError: Can’t pickle local object”错误。这个错误通常是由于无法序列化本地对象引起的。本文将介如何解决这个问题。 解决方案 以…

    http 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部