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

  • Post category:Python

HTTP的If-Modified-Since头部是用于缓存控制的一种机制,它主要用于告知服务器浏览器缓存中缓存的资源的最后修改时间。当浏览器发起对该资源的请求时,如果该资源的最后修改时间和If-Modified-Since头部所包含的时间戳一致,那么服务器就不会返回该资源的新内容,而是返回304 Not Modified状态,告知浏览器使用本地缓存。

If-Modified-Since头部传递的时间戳格式为RFC 1123标准中定义的时间格式,例如Mon, 17 Jul 2017 15:10:24 GMT。以下是If-Modified-Since头部的基本使用方法:

GET /index.html HTTP/1.1
Host: www.example.com
If-Modified-Since: Mon, 17 Jul 2017 00:00:00 GMT

以下是使用If-Modified-Since头部的两个示例:

示例1:缓存资源有更新

假设我们有一个图片资源,其URL为http://www.example.com/image.jpg,我们使用If-Modified-Since头部来告知服务器我们缓存资源的最后修改时间:

GET /image.jpg HTTP/1.1
Host: www.example.com
If-Modified-Since: Mon, 17 Jul 2017 00:00:00 GMT

当我们在之后发起请求时,如果该资源的最后修改时间早于If-Modified-Since头部所包含的时间戳(比如说,时间戳为 Mon, 17 Jul 2017 15:10:24 GMT,而最后修改时间为 Mon, 17 Jul 2017 09:30:00 GMT),服务器就会返回该资源的新内容,状态码为200 OK。

示例2:缓存资源无更新

继续使用上面那个图片资源,如果我们在之后再次发起请求时,该资源的最后修改时间晚于或等于If-Modified-Since头部所包含的时间戳(比如说,时间戳为 Mon, 17 Jul 2017 15:10:24 GMT,而最后修改时间为 Mon, 17 Jul 2017 15:09:00 GMT),服务器就会返回304 Not Modified状态,告知浏览器使用本地缓存:

GET /image.jpg HTTP/1.1
Host: www.example.com
If-Modified-Since: Mon, 17 Jul 2017 15:10:24 GMT

通过使用If-Modified-Since头部,服务器可以避免重复传输未修改的资源,从而减少网络带宽的消耗,加快网页的加载速度。此外,使用If-Modified-Since头部还可以减少服务器的负担,提升网站的整体性能。