Tengo este extraño problema con Chrome. Con bastante frecuencia, parece almacenar en caché las solicitudes PUT.Chrome está almacenando en caché una solicitud HTTP PUT
Los detalles: Tengo una aplicación que usa backbone.js y cuando intento persistir algunos cambios en un modelo (la red troncal genera automáticamente una solicitud PUT), Chrome simplemente no envía esa solicitud al servidor. Funciona perfectamente bien en Firefox e IE (no he visto el problema en Safari hasta el momento).
Aquí hay una captura de pantalla de la pestaña Red de herramientas de desarrollador de Chrome. Como se puede ver, se devuelve la respuesta a la petición que desde el caché (la solicitud no golpea el servidor !!)
Aquí hay una captura de pantalla de los detalles del encabezado de esa misma petición. Una vez más, es evidente que Chrome no se molesta en enviar la solicitud PUT al servidor.
La carga de la solicitud es datos JSON. ¿Alguna idea de por qué está sucediendo esto/qué estoy haciendo mal?
ACTUALIZACIÓN: Chromium ha confirmado que este es realmente un bug on it's end (gracias Jan Hančič).
solución temporal que terminó anulando Backbone.sync
método y añadiendo una marca de tiempo a la cadena de consulta de PUT, POST y DELETE peticiones para que siempre son únicos:
if(!options.data && model && (method == 'create' || method == 'update' || method == 'delete')) {
params.url += (params.url.indexOf('?') == -1 ? '?' : '&') + '_=' + new Date().getTime();
}
¿Tiene esto sólo sucede si envía los datos en la solicitud PUT, que ya va a enviar antes o ¿esto también occure si cambia los datos que han de presentar y dar lugar a la solicitar nuevamente? –
La respuesta del servidor no cambia, tal vez por eso está en caché. Como dijo Robin, cambie/corrija la solicitud – Zebra
Los datos definitivamente cambian. Sin embargo, creo que no debería importar si los datos han cambiado o no. Un PUT realmente no es un tipo de solicitud cacheable. Está destinado a enviar datos al servidor, no a buscar datos. – anushr