HTTP的If-Unmodified-Since头部有什么作用?

  • Post category:Python

HTTP协议中的If-Unmodified-Since头部是用于条件请求的一种机制。它的作用是告诉服务器,只有在指定的日期时间之后资源没有被修改过时,才能够响应请求。

如果资源在指定日期时间之后被修改过,则服务器将返回状态码为412 Precondition Failed 的响应,表示条件不满足,该请求被拒绝。否则,服务器将返回状态码为200 OK的响应,表示该资源未被修改,可以正常响应该请求。该机制可用于高可用性场景下的数据更新以及数据同步等场景。

以下是两条示例说明:

示例 1

客户端发送一个 GET 请求,请求头部携带If-Unmodified-Since信息,请求服务器返回在指定时间之后未被修改的资源,请求头如下:

GET /index.html HTTP/1.1
Host: www.example.com
If-Unmodified-Since: Fri, 22 May 2020 20:00:00 GMT

服务器接收到该请求后,会检查该资源的修改时间戳与请求头中指定的时间戳是否一致。如果该资源的修改时间在指定时间之后,则服务器将返回状态码为412 Precondition Failed,否则将返回状态码为200 OK以及请求资源的内容。

示例 2

客户端发送一个 PUT 请求,请求头部携带If-Unmodified-Since信息,请求服务器更新在指定时间之后未被修改的资源,请求头如下:

PUT /index.html HTTP/1.1
Host: www.example.com
If-Unmodified-Since: Fri, 22 May 2020 20:00:00 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 123

<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <h1>Hello, world!</h1>
</body>
</html>

服务器接收到该请求后,会检查该资源的修改时间戳与请求头中指定的时间戳是否一致。如果该资源的修改时间在指定时间之后,则服务器将返回状态码为412 Precondition Failed,否则将返回状态码为200 OK以及更新后的资源内容。