Tengo una página a la que se puede acceder desde URL/productos. Cuando lo visito en un navegador, responde con una página completa dentro de un diseño. Aquí está un ejemplo simplificado de cabeceras de petición y respuesta del cuerpo:El navegador no distingue un HTML parcial obtenido a través de AJAX y una página completa
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
<layout>
<products />
</layout>
Cuando un usuario hace alguna búsqueda las actualizaciones de javascript resultados a través de AJAX. Los resultados se representan sin un diseño, ya que toma tiempo para hacer y yo no lo necesitan de todos modos:
Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
X-Requested-With: XMLHttpRequest
<products />
Por lo tanto, esto funcionó bien hasta que he añadido el almacenamiento en caché Cache-Control: private, max-age=3600
. Inicialmente pensé que agregaría el encabezado Vary: X-Requested-With
y un navegador distinguiría las dos respuestas. Sin embargo, cuando obtengo/productos a través de AJAX y luego visito/productos en el navegador, muestra la respuesta parcial de AJAX.
¿Hay una manera simple de resolver este problema?
P.S. Estoy usando Ruby on Rails y jQuery si eso importa.
¿Has probado 'Vary: Accept'? – regilero
Sí, no funciona también. Creo que el navegador está almacenando correctamente ambas respuestas en caché. Pero debido a Content-Type: text/html los trata por igual y muestra el último que resulta ser parcial. –
En realidad, he tratado de responder con JSON, y ahora muestra JSON. Entonces esto no depende de Content-Type: text/html. Estoy bastante sorprendido de que "Variar" no tenga ningún efecto aquí. –