MST
星途 面试题库

面试题:Node.js中HTTP请求缓存策略的基本实现方式

请阐述在Node.js中实现HTTP请求缓存策略的几种常见方式,并简要说明如何使用`http`模块结合缓存策略来处理HTTP请求,假设缓存数据存储在内存中,当接收到相同的HTTP请求时优先返回缓存数据。
17.2万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

常见的HTTP请求缓存策略

  1. 强缓存:通过设置Cache-ControlExpires头字段实现。Cache-Control优先级高于Expires
    • Cache-Control:例如设置Cache-Control: max-age=3600,表示资源在3600秒(1小时)内有效,在此期间浏览器不会向服务器发送请求,直接使用本地缓存。
    • Expires:设置一个绝对的过期时间,如Expires: Thu, 01 Dec 2022 16:00:00 GMT,在这个时间之前浏览器使用本地缓存。
  2. 协商缓存:使用Last - Modified/If - Modified - SinceETag/If - None - Match
    • Last - Modified/If - Modified - Since:服务器在响应头中设置Last - Modified表示资源最后修改时间,客户端下次请求带上If - Modified - Since,服务器对比时间,如果资源未修改则返回304状态码,客户端使用本地缓存。
    • ETag/If - None - Match:服务器生成一个唯一标识资源的ETag,客户端下次请求带上If - None - Match,服务器对比ETag,如果相同返回304,客户端使用本地缓存。

使用http模块结合缓存策略处理HTTP请求

以下是一个简单示例,使用内存缓存来处理HTTP请求:

const http = require('http');
const url = require('url');

// 内存缓存对象
const cache = {};

const server = http.createServer((req, res) => {
    const parsedUrl = url.parse(req.url, true);
    const key = req.url;
    if (cache[key]) {
        // 如果缓存中有数据,直接返回缓存数据
        res.writeHead(200, { 'Content - Type': 'application/json' });
        res.end(JSON.stringify(cache[key]));
    } else {
        // 模拟请求处理
        setTimeout(() => {
            const data = { message: 'This is a response' };
            cache[key] = data;
            res.writeHead(200, { 'Content - Type': 'application/json' });
            res.end(JSON.stringify(data));
        }, 1000);
    }
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

在上述代码中:

  1. 定义了一个cache对象用于存储缓存数据。
  2. http服务器的请求处理函数中,首先检查请求的url是否在缓存中,如果存在则直接返回缓存数据。
  3. 如果缓存中不存在,则模拟请求处理(这里用setTimeout模拟耗时操作),处理完成后将数据存入缓存并返回给客户端。