我们需要从Node.js Express应用程序中的所有HTTP响应中删除etag
头文件。我们有一个用Express编写的Web服务API,当我们发送etags并且客户端发回if-none-match
头时,客户端会看到意外的结果。在Express Node.js中禁用etag头文件
我们试过app.disable('etag')
和res.removeHeader('etag')
,但都没有工作;应用程序无论发送标题。
是否有任何其他方法在所有响应中禁用此标头?
我们需要从Node.js Express应用程序中的所有HTTP响应中删除etag
头文件。我们有一个用Express编写的Web服务API,当我们发送etags并且客户端发回if-none-match
头时,客户端会看到意外的结果。在Express Node.js中禁用etag头文件
我们试过app.disable('etag')
和res.removeHeader('etag')
,但都没有工作;应用程序无论发送标题。
是否有任何其他方法在所有响应中禁用此标头?
app.disable('etag')
现在应该工作,出现了拉入请求合并处理这个:
https://github.com/visionmedia/express/commit/610e172fcf9306bd5812bb2bae8904c23e0e8043
UPDATE:如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
在我看来,真正解决您的问题的方法是找出由于etags而导致行为异常的原因。
要回答您的问题,Express目前不支持禁用etags标头。它实际上是讨论并合并in this pull request,但后来被恢复。如果你真的需要这个,并且不想试图解决根本问题,你可以随时应用该补丁并从那里开始。
查看express.js,仅在请求方法为GET时发送Etags。 在调用response.send()之前,您可以通过将request.method设置为其他内容来防止表达式在响应中发送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});
});
这对我的工作确定。
app.disable('etag')
这将禁用所有请求的etag头,但不是静态内容。以下内容适用于静态内容:
app.use(express.static(path.join(__dirname, 'public'), {
etag: false
}));
很酷。标记为正确的答案! – Raj 2013-11-12 16:48:51
有没有办法只为特定的端点禁用etags?我不想在我的api端点上使用etags,但我需要静态内容上的etags。 – Zambonilli 2014-11-04 17:47:37
自3.9.0以来不工作:https://github.com/strongloop/express/releases/tag/3.9.0 – Bigood 2015-10-06 13:13:24