2016-02-15 35 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);