2016-02-15 29 views
13

在每个请求中,我的服务器都正在接收GET请求到/favicon.ico,即使它是不包含html文件的REST api。为什么会发生这种情况,我如何防止这种请求?表示js阻止GET /favicon.ico

回答

34

浏览器将默认尝试从要求/favicon.ico主机名的根目录,以便在浏览器选项卡中显示图标。

如果你想避免这个请求返回404,您可以:

  • 供应favicon.ico文件可在您的网站的根目录。使用等模块将请求指向特定文件。
  • 赶上favicon.ico请求和发送204 No Content状态:

    app.get('/favicon.ico', function(req, res) { res.status(204); });

+3

我向上面的响应提交了一个编辑,指出发送'204'响应比'200'更合适。 – naterkane

+0

谢谢,很好的建议。 – duncanhall

+4

在Express 4中,'res.sendStatus(204);' – pxwise

2

我认为你的意思是你的服务器收到这样的请求。通常,浏览器会尝试在选项卡上显示一个图标。特别是Chrome非常具有侵略性(至少这是我的观察)。
你可以做的是正确处理请求的HTML页面,而忽略它的API调用(因为他们将可能通常不会在前台使用浏览器发生)

2

我的首选方法是中间件

把这个地方:

function ignoreFavicon(req, res, next) { 
    if (req.originalUrl === '/favicon.ico') { 
    res.status(204).json({nope: true}); 
    } else { 
    next(); 
    } 
} 

则:

app.use(ignoreFavicon);