В каждом запросе мой сервер получает запрос GET в /favicon.ico, даже если он REST api, который не включает html файл. Почему это происходит и как я могу предотвратить этот запрос?
Экспресс js предотвращает GET/favicon.ico
Ответ 1
Браузеры по умолчанию попытаются запросить /favicon.ico
из корня имени хоста, чтобы отобразить значок на вкладке браузера.
Если вы хотите, чтобы этот запрос не возвращал 404, вы можете:
-
favicon.ico
файлfavicon.ico
, доступный в корневом каталоге вашего сайта. - Используйте такой модуль, как service-favicon, чтобы указать запросы к определенному файлу.
-
Поймать запрос
favicon.ico
и отправить статус204 No Content
:app.get('/favicon.ico', (req, res) => res.status(204));
Ответ 2
мой предпочтительный метод - это промежуточное ПО
Поместите это где-нибудь:
function ignoreFavicon(req, res, next) {
if (req.originalUrl === '/favicon.ico') {
res.status(204).json({nope: true});
} else {
next();
}
}
тогда:
app.use(ignoreFavicon);
Ответ 3
Я думаю, вы имеете в виду, что ваш сервер получает такой запрос. Обычно браузер пытается отобразить значок на вкладке. Особенно Chrome очень агрессивен (по крайней мере, это мое наблюдение).
Что вы можете сделать, так это правильно обрабатывать запрос на ваши HTML-страницы и игнорировать его для вызовов API (поскольку они, вероятно, обычно не будут выполняться на переднем плане с помощью браузера)
Ответ 4
Я согласен с @Blair Anderson в том, что промежуточное ПО - лучший способ действий здесь, но 204
не должен возвращать тело. Кроме того, вы можете захотеть поймать все запросы 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();
});