rutas node app express cache-control etag if-modified-since

node - ¿Cómo funciona un etag en expressjs?



npm express (1)

Expressjs envía automáticamente los etags. Me gustaría saber cómo se genera el etag ... se basa en el contenido generado dinámicamente por la rutina de obtención. o hay alguna manera de que pueda actualizarlo, sin siquiera pasar por el proceso de generar el contenido (contenido dinámico - desde DB) y devolver etag como lo mismo.

puede ser un middleware que comienza con solo verificar si es un id de sesión válido y devolver el mismo etag que el cliente proporciona o puede basarse en la url + session id ... de esa manera será único. y termina la solicitud allí, pasando por toda la llamada a la base de datos y todas esas cosas. en cuyo caso necesitaría saber que el cliente está haciendo una llamada al 304.

Podría ir con la etiqueta expires.but cuando termine la sesión. Si alguien está abriendo la url no debería permitir. Así que estoy pensando que el etag debería basarse también en el ID de sesión. ¿Cómo funciona si modificado puede funcionar en este escenario de contenido dinámico. puede ser utilizado


Al momento de escribir (8 de julio de 2014), los ETags débiles se generan utilizando CRC32 ( source ) y los ETags fuertes se generan utilizando MD5 ( source ).

Según lo que diga uno de los colaboradores de Express , puede especificar si desea utilizar los ETags fuertes o débiles mediante:

app.enable(''etag'') // use strong etags app.set(''etag'', ''strong'') // same app.set(''etag'', ''weak'') // weak etags

Parece que también puedes especificar tu propia función personalizada para hacer los ETags así:

app.set(''etag'', function(body, encoding){ /* return valid etag */ });

También vale la pena mirar el paquete NPM fresh , ya que se usa en Express para comprobar la frescura ( source2 , source2 ).

En cuanto a su aplicación, recuerde que puede anular cualquier encabezado de respuesta, por ejemplo, res.set(''etag'', ''my-awesome-etag-value'') antes de invocar res.send() (o función similar). Puede encontrar más información (incluidas las ventajas y desventajas) aquí: https://github.com/visionmedia/express/issues/2129#issue-34053148