¿Conoces algún uso práctico de If-Unmodified-Since in the wild? Desde el description, parece que este encabezado estaba destinado a ayudar a evitar las escrituras sucias. es decir, actualice este recurso solo si no se ha modificado desde la última hora modificada disponible con el cliente. A diferencia de If-Modified-Since, no parece ayudar con el almacenamiento en caché. ¿Me estoy perdiendo de algo?¿Cuál es el uso del encabezado HTTP If-Unmodified-Since?
Respuesta
Puedes usarlo p. Ej. para un range request.
ejemplo: su cliente solicita el recurso http://examp.le/foo?id=3 y la longitud del contenido es 4096 pero su cliente solo solicita los primeros 1024 bytes. Puede entonces (en un momento posterior) solicitar los 3072 bytes restantes, pero eso no tiene sentido si el recurso ha cambiado mientras tanto.
editar: También es posible que no desee cambiar/actualizar los datos si el recurso ha cambiado mientras tanto. P.ej. solicita un registro de cliente y edita algo. Si alguien más ha cambiado el registro mientras tanto, esto podría generar inconsistencias. Por lo tanto, envíe sus actualizaciones con un encabezado if-unmodified-since (-I-recuperado-los-datos) y el servidor web rechazará sus actualizaciones si el registro ya ha sido modificado; su cliente puede entonces solicitar los datos "en conflicto".
edit2: desde que ha pedido "cualquier uso práctico de If-Unmodified-Since in the wild": vea http://msdn.microsoft.com/en-us/library/dd179371.aspx#Subheading1.
Supongamos que tiene el primer requested the Blob properties. Ahora ya sabes, por ejemplo el tipo de contenido y la longitud del contenido (tal vez lo necesite para algún tipo de asignación). Alguien/algo puede cambiar el blob antes de enviar la segunda solicitud, Get Blob. Si envía el valor de Last-Modified como valor del encabezado If-Unmodified-Since, el servidor responderá con el código de error apropiado si el blob ha cambiado.
Estos son ejemplos de un bloqueo optimizado de bloqueo/sellado como un medio de control de concurrencia, donde el valor del encabezado Last-Modified sirve como el token de guardia. Ver p. https://en.wikipedia.org/wiki/Optimistic_concurrency_control
Supongamos que está desarrollando una aplicación que muestra el clima local para un lugar determinado. Si el servidor solo actualiza la información meteorológica solo 'x' veces al día, el navegador puede tener cuidado de no realizar una solicitud http dentro de ese marco de tiempo (incluso si hay una actualización).
Es útil al reanudar descargas grandes.
Es útil para múltiples solicitudes, realizadas durante un período de tiempo, pero relacionadas con un único recurso sin cambios.
Ejemplos:
las solicitudes de intervalo. La respuesta a la primera solicitud de rango (o quizás una preliminar
HEAD
) incluye el encabezadoLast-Modified
. Las solicitudes posteriores están destinadas solo a la misma versión de ese recurso. Si el recurso cambió entre el momento en que comenzamos la secuencia de solicitudes de rango y algún tiempo en el medio de la secuencia, queremos comenzar de nuevo.Control de concurrencia optimista. Primero tenemos
GET
un recurso, realizamos algunos cambios en el lado del cliente y deseamosPUT
el recurso actualizado. Pero solo queremosPUT
el recurso actualizado siempre y cuando nadie más lo actualice mientras tanto. No queremos sobrescribir los cambios de nadie. Si resulta que alguien ha cambiado el recurso mientras tanto, queremosGET
de nuevo, intenta volver a aplicar los cambios en el cliente (algo así comogit rebase
) e intente de nuevoPUT
el recurso modificado.
- 1. ¿Cuál es el razonamiento detrás del encabezado HTTP Date?
- 2. ¿Qué es el "encabezado HTTP sin procesar"? ¿Cuál es la diferencia entre "encabezado HTTP" y "encabezado HTTP sin procesar"?
- 3. ¿Cuál es la función del encabezado HTTP "Vary: Accept"?
- 4. ¿Cuál es el campo "Content-Length" en el encabezado HTTP?
- 5. ¿Cuál es el propósito del campo de encabezado HTTP "Content-Location"?
- 6. ¿Cuál es el propósito del uso?
- 7. Configuración del encabezado HTTP Accept para JsonRestStore
- 8. ¿Cuál es el uso del uso de init() en JavaScript?
- 9. ¿Por qué existe el encabezado HTTP del servidor?
- 10. ¿Cuál es el riesgo de tener el encabezado HTTP "Cache-Control: public"?
- 11. HTTP Get: ¿Solo descargar el encabezado? (HEAD no es compatible)
- 12. ¿Cuál es el propósito de los valores "q" en el encabezado de solicitud "Aceptar" de HTTP?
- 13. HTTP rango encabezado
- 14. NSURLRequest configurar el encabezado HTTP
- 15. ¿Cuál es el tamaño promedio de un encabezado de solicitud/respuesta HTTP?
- 16. ¿Cuál es el método predeterminado de HTTP?
- 17. ¿Cuándo podría el encabezado del host HTTP ser indefinido?
- 18. Semáforo: ¿Cuál es el uso del recuento inicial?
- 19. WCF Soap Actions en el encabezado HTTP o encabezado SOAP?
- 20. ¿Cuál es el uso de window.external?
- 21. ¿Cuál es el código de estado HTTP más apropiado para devolver si falta un encabezado requerido?
- 22. ¿Es seguro usar el encabezado "X -..." en una respuesta HTTP?
- 23. PHP eliminar encabezado HTTP
- 24. redirect_to con encabezado HTTP
- 25. ¿Cuál es el color de fondo del encabezado de la sección TableView predeterminado en el iPhone?
- 26. ¿Cuál es el siguiente encabezado para: X-Chrome-Variations?
- 27. En ECMAScript5, ¿cuál es el alcance del "uso estricto"?
- 28. ¿Cuál es el uso del método setTag de View?
- 29. cuál es el uso del método recycle() en TypedArray
- 30. ¿Cuál es el uso del método printStackTrace() en Java?
Mi primer pensamiento fue simplemente "control de concurrencia". Buena captura sobre las solicitudes de rango! – rix0rrr
Es más adecuado para el control de concurrencia. No sé por qué esta respuesta tiene un voto tan alto, pero el encabezado de rango es más adecuado para las solicitudes de rango. p.ej. Rango: bytes = 1024- – sotn
@sotn El OP solicitó "uso práctico de If-Unmodified-Since in the wild", por lo que no proporcioné un concepto como respuesta sino 2.5 ejemplos de control de concurrencia. Pero tal vez tienes razón; agregará otro pequeño párrafo. – VolkerK