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以及更新后的资源内容。