HTTP的ETag和Last-Modified头部有什么作用?

yizhihongxing

HTTP协议中的ETag和Last-Modified是两个常用的头部字段,它们都是用于协商缓存的。在客户端和服务器之间传输资源时,对于一些静态资源,其内容很可能会长时间不变,因此可以通过协商缓存来减少网络传输量,提高网站性能。

ETag头部

ETag头部可以理解为一个实体标识符,是由服务器为每个响应资源生成的一个唯一的字符串。客户端在请求资源时,可以携带上一次请求返回的ETag值,服务器收到请求后会计算当前资源的ETag值,如果两个值一致则返回304 Not Modified,表示客户端可以继续使用缓存中的资源,否则返回200 OK,表示需要重新传输资源。

下面是一个示例:

客户端发起请求:

GET /static/image.png HTTP/1.1
Host: example.com
If-None-Match: "2f28-571d1582e1f19"

标识上一次请求的ETag值为"2f28-571d1582e1f19"。服务器收到请求后会计算当前资源的ETag值,如果与上一次请求的值一致,则返回:

HTTP/1.1 304 Not Modified
ETag: "2f28-571d1582e1f19"

表示可以使用缓存中的资源。

而如果当前资源的ETag值不同,则返回:

HTTP/1.1 200 OK
ETag: "3f3a-58cd733ee383f"
Content-Type: image/png
Content-Length: 16115

表示需要重新传输资源。

Last-Modified头部

Last-Modified头部记录了响应资源的最后修改时间,也是用于协商缓存的。客户端在请求资源时,可以携带上一次请求返回的Last-Modified值,服务器收到请求后会判断当前资源的修改时间是否比上一次请求返回的值更晚,如果是则返回200 OK,否则返回304 Not Modified。

下面是一个示例:

客户端发起请求:

GET /static/file.css HTTP/1.1
Host: example.com
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT

标识上一次请求的资源最后修改时间为"Wed, 21 Oct 2015 07:28:00 GMT"。服务器收到请求后会判断当前资源的修改时间是否比上一次请求返回的值更晚,如果是则返回:

HTTP/1.1 200 OK
Last-Modified: Wed, 23 Oct 2019 11:51:00 GMT

表示需要重新传输资源。

而如果当前资源的修改时间比上一次请求返回的值更早或相同,则返回:

HTTP/1.1 304 Not Modified
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

表示可以使用缓存中的资源。

总体而言,ETag头部和Last-Modified头部都是基于资源的标识符或修改时间进行缓存协商,可以有效地减少网络传输量和提升网站性能。在实际应用中,根据具体的情况和需求,可以选择使用其中之一或同时使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:HTTP的ETag和Last-Modified头部有什么作用? - Python技术站

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

相关文章

  • springboot项目启动,但是访问报404错误的问题

    针对springboot项目启动后访问报404错误的问题,可以从以下几个方面进行排查和解决: 1. 检查项目是否正确启动 首先需要检查项目是否启动成功。可以通过查看应用程序日志等方式来确认是否启动成功,如果启动成功,则可以在日志中看到类似下面的信息: Tomcat started on port(s): [8080] with context path ”…

    http 2023年5月13日
    00
  • 解决@RequestBody接收json对象报错415的问题

    以下是关于“解决@RequestBody接收json对象报错415的问题”的完整攻略: 简介 在Spring MVC中,我们可以使用@RequestBody注解接收客户端发送的JSON对象。但是,在某些情况下可能会出现@RequestBody接收JSON对象报错415的问题。本文将介绍@RequestBody接收JSON对象报错415的原因以及解决方法。 原…

    http 2023年5月13日
    00
  • python用700行代码实现http客户端

    以下是关于“Python用700行代码实现HTTP客户端”的完整攻略: 问题描述 Python是一种流行的编程语言,可以用于编写各种类型的应用程序,包括HTTP客户端。本文将介绍如何使用Python编写一个HTTP客户端,代码行数约为700行。 解决步骤 以下是使用Python写HTTP客户端的步骤: 步骤一:了解问题 首先,需要了解HTTP客户端的基本原理…

    http 2023年5月13日
    00
  • JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法

    当我们在JavaScript编程中遇到“Uncaught SyntaxError: Unexpected token )”错误时,通常是由于代码中存在语法错误导致的。本文将提供详细的解决方案,包括检查代码语法和检查括号匹配,同时提供两个示例说明。 解决方案1:检查代码语法 当我们遇到“Uncaught SyntaxError: Unexpected toke…

    http 2023年5月13日
    00
  • http请求405错误方法不被允许的解决 (Method not allowed)

    以下是关于“HTTP请求405错误方法不被允许的解决(Method not allowed)”的完整攻略: 问题描述 在开发中,我们可能会遇到“HTTP请求405错误方法不被允许”的问题。这个问题通常是由于客户端发送的请求方法不被服务器支持导致的。下面我们将介绍405错误的原因和解决方法。 原因分析 405错误通常是由于客户端发送的请求方法不被服务器支持导致…

    http 2023年5月13日
    00
  • sql2000报错Successfully re-opened the local eventlog解决方法

    标题:Sql2000报错Successfully re-opened the local eventlog解决方法 在Sql2000中,有时候会遇到“Successfully re-opened the local eventlog”的错误信息。这个错误信息通常是由于Sql Server的日志系统出现错误引起的。在这篇攻略中,我们将详细讲解如何解决这个问题。…

    http 2023年5月13日
    00
  • IntelliJ IDEA报错Error:java: Compilation failed: internal java compiler error的解决办法

    IntelliJ IDEA报错Error:java: Compilation failed: internal javac compiler error的解决办法 在使用 IntelliJ IDEA 进行 Java 开发的过程中,有时会遇到这样的报错:Error:java: Compilation failed: internal javac compile…

    http 2023年5月13日
    00
  • java调用Restful接口的三种方法

    当通过Java程序调用Restful接口时,可以使用以下三种常用的方法: 1. 使用Java内置的HttpURLConnection类 HttpURLConnection是Java内置的一个可用于发送HTTP/HTTPS请求的类。让我们来看看如何使用它来调用Restful接口: import java.net.HttpURLConnection; impor…

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