Tecnología · GUÍA PRÁCTICA
¿curl dañó el archivo al reanudar? Vincula cada rango a un ETag fuerte
Un desplazamiento no identifica la representación. Usa Range e If-Range, añade solo un 206 exacto, reinicia con 200 y verifica antes de promover atómicamente.

Una reanudación segura exige que cada byte añadido pertenezca a la misma representación HTTP. La longitud local que usa curl -C - es un desplazamiento, no una identidad de contenido.
Vincula el parcial con la URL final y un ETag fuerte, pide el resto con Range e If-Range y deja que 206 o 200 decidan entre añadir o reemplazar desde cero. Verifica antes del cambio atómico.
1. Trata la longitud como desplazamiento, no identidad
curl -C - mide el destino y pide los bytes restantes, pero no demuestra que el servidor conserve la misma versión. Guarda URL final, ETag fuerte, longitud local, total esperado y resumen del editor en un registro lateral ligado a una sola salida.
Usa un .part dedicado y no compartas un archivo de ETag entre varias URL.
2. Exige un validador fuerte antes de reanudar
Envía Range: bytes=N- e If-Range con el ETag fuerte guardado. RFC 9110 prohíbe un ETag débil en If-Range. Sin validador fuerte, descarga desde cero a un archivo nuevo.
--etag-compare envía If-None-Match, no If-Range. Un envoltorio debe enviar If-Range explícito y capturar las cabeceras de respuesta.
3. Decide la escritura con la respuesta
Añade solo con 206, Content-Range iniciado en N, total plausible y validador coherente. Escribe primero una cola temporal y valida sus cabeceras antes de unirla.
Un If-Range falso devuelve el cuerpo completo con 200: debe reemplazar un temporal nuevo, nunca añadirse. Un 416 exige comparar longitud, total y validador.
4. Reintenta fallos de transporte, no todos
Reintenta solo fallos transitorios clasificados, con límite y espera. Autenticación fallida, cambios de redirección, validador ausente, estado inesperado, Content-Range mal formado o resumen distinto requieren parar o reiniciar limpio.
En la prueba con curl 8.5.0, un rango sin validar tras cambiar el objeto produjo 206 y un archivo mezclado; el If-Range antiguo produjo 200 y reemplazo seguro; el objeto igual produjo 206 y resumen correcto.
5. Verifica antes de la promoción atómica
Al terminar, compara el resumen del editor. Si no existe, verifica al menos total y ETag fuerte, admitiendo que el tamaño no prueba integridad. Ejecuta también validación del formato cuando exista.
Solo tras aceptar, sincroniza si procede y renombra atómicamente en el mismo sistema de archivos. Conserva registro y logs; aísla parciales mezclados o no verificables.
