как добавить заголовок expires в favicon.ico в Node.js / Express

В Express я добавляю заголовки с истекшим сроком действия в свои статические файлы, подобные этому

app.use(function (req, res, next) {

    // static folder: css
    if (req.url.indexOf('/css/') === 0) {
        res.setHeader('Cache-Control', 'public, max-age=345600'); // 4 days
        res.setHeader('Expires', new Date(Date.now() + 345600000).toUTCString());
    }

});

app.use(express.static(root + '/app'));

Чего я не могу сделать, так это поймать такой запрос favicon.ico.

Есть ли способ добавить заголовок expires к значку в Node / Express?
Чем отличается запрос favicon.ico от других статических файлов?

Спасибо!


person ezmilhouse    schedule 04.11.2013    source источник
comment
на что похож req.url при доставке favicon.ico? Он работает через вашу функцию app.use?   -  person hgoebl    schedule 04.11.2013
comment
+1 за хорошую ссылку на код. Благодарность!   -  person Amir Arad    schedule 11.02.2014


Ответы (3)


Вы можете передать параметр maxAge как значку, так и статическому промежуточному программному обеспечению:

app.use(express.favicon(__dirname + '/public/favicon.ico', { maxAge: 2592000000 }));

Источники:

  1. https://groups.google.com/forum/?fromgroups#!topic/express-js/W5mkAorVrW8
  2. http://www.senchalabs.org/connect/favicon.html
person user568109    schedule 04.11.2013

Я думаю, что это более удобно для SEO.

app.use(express.static(__dirname + '/public', {
        maxAge: 86400000,
        setHeaders: function(res, path) {
            res.setHeader("Expires", new Date(Date.now() + 2592000000*30).toUTCString());
          }
    }))
person Amged    schedule 26.02.2016

Ответ здесь правильный, но немного устаревший, поскольку express больше не поддерживает это промежуточное ПО, поэтому простое решение - использовать этот пакет.

https://github.com/expressjs/serve-favicon

var connect = require('connect')
var favicon = require('serve-favicon')
var path = require('path')

var app = connect()
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))

// Add your middleware here, etc.

app.listen(3000)

Код прямо по ссылке выше ...

person Sten Muchow    schedule 06.03.2017