在Express Node.js中禁用etag标题

我们需要从Node.js Express应用程序中的所有HTTP响应中删除etag头文件。 我们有一个用Express编写的Web服务API,当我们发送etags并且客户端发回了if-none-match头部时,客户端会看到意外的结果。

我们尝试了app.disable('etag')res.removeHeader('etag') ,但都没有工作。 应用程序无论发送标题。

是否有任何其他方式在所有的回应中禁用此标题?

app.disable('etag')现在应该可以工作,已经有一个合并的pull请求来处理这个问题:

https://github.com/visionmedia/express/commit/610e172fcf9306bd5812bb2bae8904c23e0e8043

更新 :正如Bigood在评论中指出的那样,新的做事方式如下

 app.set('etag', false); // turn off 

更改版本3.9.0发生: https : //github.com/strongloop/express/releases/tag/3.9.0

有关设置etag的更多选项,请在这里查看4.x文档: http : //expressjs.com/4x/api.html#app.set

 app.disable('etag') 

这将会禁用所有请求的etag标头,但不能用于静态内容。 以下内容适用于静态内容:

 app.use(express.static(path.join(__dirname, 'public'), { etag: false })); 

在我看来,真正解决你的问题的办法是弄清楚为什么由于etags而performance得很奇怪。

为了回答你的问题,Express目前不支持禁用etags头文件。 它实际上是在这个拉取请求中被讨论和合并的,但后来被还原了。 如果你真的需要这个,不想试图解决根本问题,你总是可以应用这个补丁,并从那里去。

查看express.js,只有在请求方法为GET时才会发送Etags。 您可以在调用response.send()之前通过将request.method设置为其他内容来防止express在响应中发送etags。

例如:

 app.get('/path/returnsJSON', function(req, res){ /* HACK to workaround the framework sending e-tags and "304 NOT MODIFIED" responses */ req.method="NONE"; // was "GET" res.status(200).send({data:1}); }); 

这对我来说行得通。