Esta es la situación:negociación contenido ignorado cuando se utiliza el navegador botón Atrás
Tengo una aplicación web que la respuesta a una solicitud de una lista de recursos, le dicen:
/items
Este es un principio solicitado directamente por el navegador web navegando a esa ruta. El navegador usa su encabezado estándar "Aceptar" que incluye "texto/html" y mi aplicación lo nota y devuelve el contenido HTML para la lista de elementos.
Dentro del HTML devuelto es un poco de Javascript (jQuery), que a su vez hace una petición AJAX para recuperar los datos reales:
/items
Sólo que esta vez, el "Aceptar" de cabecera se establece explícitamente en "application/json ". De nuevo, mi aplicación lo nota y JSON se devuelve correctamente a la solicitud, los datos se insertan en la página y todo está satisfecho.
Aquí viene el problema: El usuario navega a otra página y luego presiona el botón ATRÁS. Luego se les pide que guarden un archivo. Esto resulta ser el JSON datos de la lista de elementos.
Hasta ahora he confirmado que esto sucederá tanto en Google Chrome como en Firefox 3.5.
Hay dos posibles tipos de respuestas aquí:
¿Cómo puedo solucionar el problema. ¿Hay alguna combinación mágica de encabezados de control de caché, u otro vudú que haga que el navegador haga lo correcto aquí?
Si cree que estoy haciendo algo horriblemente mal aquí, ¿cómo debo ir al acerca de esto? Estoy buscando la corrección, pero también estoy tratando de no sacrificar flexibilidad.
Si ayuda, la aplicación es una aplicación web JAX-RS, utilizando Restlet 2.0m4. Puedo proporcionar encabezados de solicitud/respuesta de muestra si es útil, pero creo que el problema es completamente reproducible.
botón "Volver" es el mal. –
Esto parece un problema futuro que voy a tener después de descubrir (http://stackoverflow.com/questions/5250923). Tengo curiosidad, ¿terminaste apegándote a esta solución o finalmente la abandonaste para diferentes URL? La limpieza de la única URL RESTful para diferentes representaciones del mismo recurso es ciertamente ideal. – mckamey