📜  在哪里添加 If-Modified-Since (1)

📅  最后修改于: 2023-12-03 15:37:41.442000             🧑  作者: Mango

在哪里添加 If-Modified-Since

介绍

在 HTTP 协议中,If-Modified-Since 是一个请求头部,用来检测服务器上的资源在某个时间之后是否有过修改。如果资源没有修改,服务器会返回 304 Not Modified 状态码,告诉客户端直接使用之前缓存的版本。

这个头部通常在 HTTP GET 请求中出现,例如:

GET /index.html HTTP/1.1
Host: example.com
If-Modified-Since: Sat, 01 Jan 2000 00:00:00 GMT

如果服务器上的 /index.html 资源自从 2000 年 1 月 1 日以来没有变化,服务器会返回以下响应:

HTTP/1.1 304 Not Modified

这样客户端就可以使用之前缓存的版本,而无需再次下载。

在本篇文章中,我们将介绍如何在不同的编程语言和框架中添加 If-Modified-Since 请求头部。

添加 If-Modified-Since
Node.js

在 Node.js 中,可以使用内置的 http 模块或第三方的 request 模块来发送 HTTP 请求。下面是一个使用 http 模块发送 HTTP GET 请求并添加 If-Modified-Since 请求头部的例子:

const http = require('http');

const options = {
  hostname: 'example.com',
  path: '/index.html',
  headers: {
    'If-Modified-Since': 'Sat, 01 Jan 2000 00:00:00 GMT'
  }
};

const req = http.request(options, (res) => {
  if (res.statusCode === 304) {
    console.log('Not modified, use cache');
  } else {
    console.log('Modified, download new version');
  }
});

req.end();
Python

在 Python 中,可以使用内置的 urllib 模块或第三方的 requests 模块来发送 HTTP 请求。下面是一个使用 urllib 模块发送 HTTP GET 请求并添加 If-Modified-Since 请求头部的例子:

import urllib.request

req = urllib.request.Request(
  url='http://example.com/index.html',
  headers={
    'If-Modified-Since': 'Sat, 01 Jan 2000 00:00:00 GMT'
  }
)

try:
  with urllib.request.urlopen(req) as res:
    if res.status == 304:
      print('Not modified, use cache')
    else:
      print('Modified, download new version')
except urllib.error.HTTPError as e:
  print(e.reason)
Ruby on Rails

在 Ruby on Rails 中,可以使用内置的 Net::HTTP 模块或第三方的 HTTParty 模块来发送 HTTP 请求。下面是一个使用 Net::HTTP 模块发送 HTTP GET 请求并添加 If-Modified-Since 请求头部的例子:

require 'net/http'
require 'uri'

uri = URI.parse('http://example.com/index.html')
req = Net::HTTP::Get.new(uri)
req['If-Modified-Since'] = 'Sat, 01 Jan 2000 00:00:00 GMT'

res = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(req)
end

if res.code == '304'
  puts 'Not modified, use cache'
else
  puts 'Modified, download new version'
end
结论

通过添加 If-Modified-Since 请求头部,客户端可以利用缓存加速页面加载,并减少带宽和服务器资源的开销。不同的编程语言和框架中添加 If-Modified-Since 的方式略有不同,但核心思想是一致的。需要注意的是,如果服务器上的资源被修改过,客户端仍需要下载新版本。