No cache in Node.js server

前端 未结 6 758
北荒
北荒 2020-12-14 05:34

I have read that to avoid caching in Node.js, it is necessary to use:

res.header(\'Cache-Control\', \'no-cache, private         


        
相关标签:
6条回答
  • 2020-12-14 06:10

    Make use of a middleware to add no-cache headers. Use this middleware where-ever you intend to turn caching off.

    function nocache(req, res, next) {
      res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
      res.header('Expires', '-1');
      res.header('Pragma', 'no-cache');
      next();
    }
    

    Use the middleware in your routes definition:

    app.get('/getfile', nocache, sendContent);
    
    function sendContent(req, res) {
      var localPath = 'some-file';
      var mimeType = '';
      fs.readFile(localPath, 'utf8', function (err, contents) {
        if (!err && contents) {
          res.header('Content-Type', mimeType);
          res.header('Content-Length', contents.length);
          res.end(contents);
        } else {
          res.writeHead(500);
          res.end();
        }
      });
    }
    

    Let me know if this works for you.

    0 讨论(0)
  • 2020-12-14 06:11

    After spelunking through source code for the express and fresh modules, this works from the server side (before res.end is called):

    req.headers['if-modified-since'] = undefined;
    req.headers['if-none-match'] = undefined;
    

    Nasty, but it works.

    0 讨论(0)
  • 2020-12-14 06:19

    You can use nocache Middleware to turn off caching.

    npm install --save nocache
    

    Apply the middleware to your app

    const nocache = require('nocache');
    ...
    app.use(nocache());
    

    This disables browser caching.

    0 讨论(0)
  • 2020-12-14 06:22

    Pylinux's answer worked for me, but upon further inspection, I found the helmet module for express that handles some other security features for you.

    http://webapplog.com/express-js-security-tips/

    To use, install and require helmet in express.js, then call app.use(helmet.noCache());

    0 讨论(0)
  • 2020-12-14 06:23

    Set these headers on your response:

    'Cache-Control': 'private, no-cache, no-store, must-revalidate'
    'Expires': '-1'
    'Pragma': 'no-cache'
    

    If you use express you can add this middleware to have no cache on all requests:

    // var app = express()
    app.use(function (req, res, next) {
        res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
        res.header('Expires', '-1');
        res.header('Pragma', 'no-cache');
        next()
    });
    
    0 讨论(0)
  • 2020-12-14 06:25

    You've already written your headers. I don't think you can add more after you've done that, so just put your headers in your first object.

    res.writeHead(200, {
      'Content-Type': mimeType,
      'Content-Length': contents.length,
      'Accept-Ranges': 'bytes',
      'Cache-Control': 'no-cache'
    });
    
    0 讨论(0)
提交回复
热议问题