在每个请求中,我的服务器都收到了对/favicon.ico的GET请求,即使它的REST api不包含html文件也是如此。为什么会发生这种情况?如何防止此请求?
答案 0 :(得分:56)
默认情况下,浏览器会尝试从主机名的根目录请求/favicon.ico
,以便在浏览器标签中显示图标。
如果您想避免此请求返回404,您可以:
favicon.ico
文件。抓住favicon.ico
请求并发送204 No Content
状态:
app.get('/favicon.ico', (req, res) => res.status(204));
答案 1 :(得分:12)
我首选的方法是中间件
把它放在某个地方:
function ignoreFavicon(req, res, next) {
if (req.originalUrl === '/favicon.ico') {
res.status(204).json({nope: true});
} else {
next();
}
}
然后:
app.use(ignoreFavicon);
答案 2 :(得分:3)
我认为您的意思是您的服务器收到了这样的请求。通常,浏览器会尝试在选项卡上显示一个图标。特别是Chrome非常具有攻击性(至少是我的观察) 您可以做的是正确处理HTML页面的请求并忽略API调用(因为它们通常不会在浏览器的前台发生)
答案 3 :(得分:3)
我同意@Blair Anderson的观点,即中间件是最好的行动方案,但204
should not return a body。此外,您可能希望捕获所有 favicon请求,例如:https://example.com/some/path/favicon.ico。在这种情况下,这样的效果最好:
app.use( function(req, res, next) {
if (req.originalUrl && req.originalUrl.split("/").pop() === 'favicon.ico') {
return res.sendStatus(204);
}
return next();
});
答案 4 :(得分:1)
对于网络应用,我们应该从静态资源中提供favicon.ico,该静态资源要么直接通过Vanilla服务,要么通过使用快速中间件serve-favicon
对于 API应用,我们应提供204(无内容)状态代码,以确保成功往返。
我们可以利用sendStatus()
方法以状态代码204(无内容)进行响应
app.get('/favicon.ico', function(req, res) {
res.sendStatus(204);
});
如果您使用的是status(204)
,请确保也使用end()
。
否则,请求将保持待处理状态。
app.get('/favicon.ico', function(req, res) {
res.status(204);
res.end();
});