HTTP协议的If-Range头部用于在条件请求中指定上一次请求获取资源的时间戳或ETag,以判断资源是否发生了更改。如果资源发生了变化,服务器将发送完整的响应;如果资源没有变化,则服务器返回状态码为206 Partial Content,只向客户端发送未改变的部分内容。
If-Range头部的语法格式如下:
If-Range: <entity-tag> | <date>
其中,entity-tag表示资源的ETag标记,而date表示资源的最后修改时间。当请求的资源没有被修改时,服务器将忽略Range头部的请求范围,返回整个资源;当资源有变化时,则向客户端返回新的响应。
以下是两个示例说明:
- 请求资源的时间戳进行判断
客户端请求资源时,使用If-Range头部提供上一次请求时返回的时间戳。
GET /resource HTTP/1.1
If-Range: Sat, 29 Oct 2022 19:43:31 GMT
如果此时服务器返回状态码为200 OK,则表示资源已经修改,客户端需要重新下载整个资源。如果服务器返回状态码为206 Partial Content,则表示资源没有修改,服务器会根据请求的Range头部范围信息,向客户端发送未改变的部分内容。
- 请求资源的ETag标记进行判断
客户端请求资源时,使用If-Range头部提供上一次请求时返回的ETag标记值。
GET /resource HTTP/1.1
If-Range: "81a4c98bfbb9d3f8abc22c5f5ba0f5ce"
如果此时服务器返回状态码为200 OK,则表示资源已经修改,客户端需要重新下载整个资源。如果服务器返回状态码为206 Partial Content,则表示资源没有修改,服务器会根据请求的Range头部范围信息,向客户端发送未改变的部分内容。
总之,If-Range头部是用于在HTTP的条件请求中,判断资源是否被修改,以减少网络带宽的使用。