如何在Connect/Express静态中间件中完全阻止HTTP 304响应?

Jac*_*ble 14 node.js node.js-connect

有时在开发过程中,防止HTTP 304响应(支持200)会非常好,并使Connect/Express静态中间件读取文件系统的每个响应,而不是进行任何缓存.

我试过玩maxAge0和1的值,但无济于事:

app.use(express.static(__dirname + '/public', { maxAge: 1 }))
Run Code Online (Sandbox Code Playgroud)

小智 19

我在开发期间通过这样做得到200个响应:

var express = require('express');
app = express();
app.use(function(req, res, next) {
  req.headers['if-none-match'] = 'no-match-for-this';
  next();    
});
Run Code Online (Sandbox Code Playgroud)


小智 8

app.disable('etag');
Run Code Online (Sandbox Code Playgroud)

防止'etag'响应可能有所帮助

  • 不,不会,因为 Express 仍会计算 ETag 并进行比较,只是不返回它。因此,如果服务器之前确实返回了 ETag,那么即使您进行了此更改,发送该标签的用户现在仍然会收到 304。参见https://github.com/expressjs/express/pull/2841/ (2认同)

Jon*_*Ong 5

它确实从每个响应的文件系统中读取.只是如果请求ETAG与响应ETAG匹配,它就不会发送响应的主体,因为它不需要.它是具有相同散列的相同文件.这就是304响应的工作方式.

为什么要阻止304回复?

  • 对于为什么Express会返回304s,它让我感到困惑.谢谢! (4认同)
  • 因为弱etags缓存JS文件,这可能是前端开发人员的痛苦. (3认同)