Corrígeme si me equivoco, y sé que esta es una publicación antigua, pero me gustaría comentar para los nuevos transeúntes. Creo que un caché de proxy inverso no ayuda tanto como te gustaría cuando usas ETags.
Los mecanismos de validación de almacenamiento en caché utilizan el servidor de origen para validar si la ETag (o la fecha de la última modificación) en la solicitud sigue siendo válida (coincide o no con los recursos etag, dependiendo de qué encabezado se use o se haya / no se haya modificado desde la fecha indicada en la solicitud).
Esto significa que una memoria caché de proxy inverso, como Varnish, aún pasará esa solicitud al servidor de origen. Puede responder con la solicitud en lugar de que el servidor la maneje, pero no guardó el viaje de ida y vuelta al servidor de origen.
Los navegadores pueden almacenar en caché las respuestas y manejar una respuesta 304 en cualquier caso, por lo que la caché privada del usuario puede ser más adecuada para manejar esto que usar un proxy inverso (YMMV, especialmente a escala, y dependiendo de su caso de uso, por supuesto). desea hacer suposiciones sobre sus aplicaciones).
De la especificación 13.3 :
Cuando un caché tiene una entrada obsoleta que le gustaría usar como respuesta a la solicitud de un cliente, primero tiene que consultar con el servidor de origen (o posiblemente un caché intermedio con una nueva respuesta) para ver si su entrada en caché todavía es utilizable . Llamamos a esto "validación" de la entrada de caché. Como no queremos tener que pagar los gastos generales de retransmitir la respuesta completa si la entrada en caché es buena, y no queremos pagar los gastos generales de un viaje de ida y vuelta adicional si la entrada en caché no es válida, el protocolo HTTP / 1.1 admite El uso de métodos condicionales.
y luego nota 13.3.4 :
Un proxy de almacenamiento en caché HTTP / 1.1, al recibir una solicitud condicional que incluye una fecha de Última modificación y una o más etiquetas de entidad como validadores de caché, NO DEBE devolver una respuesta almacenada en caché local al cliente a menos que esa respuesta en caché sea coherente con todos los campos de encabezado condicional en la solicitud.
Por lo tanto, Varnish puede devolverle una respuesta, pero aún tiene un viaje de ida y vuelta al servidor. Si puede usar un caché de aplicaciones como APC o memcache, entonces eso podría valer la pena. Sin embargo, el almacenamiento en caché de validación es generalmente mejor para el ahorro de ancho de banda que para el ahorro de recursos del servidor.
El almacenamiento en caché de validación puede dejarse en manos del cliente (navegador o código api).
El uso del modelo de caducidad para el almacenamiento en caché es donde realmente brilla un caché de proxy inverso. Esto le permite omitir golpear el servidor de origen por completo. Utilizando Expires
, Cache-Control
, Date
, etc, es el mejor (de nuevo, la OMI) para un mecanismo de caché de proxy inverso como el caché puede devolver la respuesta, suponiendo que no es rancio, sin tener que golpear el servidor de origen.