Resumen

  • Una caché que implementa campos dirigidos selecciona el primer campo válido y no vacío de su lista ordenada; una caché que no tiene ese campo entre sus objetivos no debe cambiar su conducta por él.
  • Por ello, una misma respuesta puede almacenarse, rechazarse o quedar gobernada por otro campo en saltos distintos, aunque CDN-Cache-Control sea sintácticamente correcto.

Imaginemos un despliegue expresamente hipotético. El origen envía Cache-Control: no-store y CDN-Cache-Control: max-age=600. El primer CDN reconoce el campo dirigido y guarda la respuesta durante diez minutos. Una caché empresarial posterior no incluye ese campo en su lista y obedece no-store. Otro CDN sitúa un campo propio del proveedor antes que CDN-Cache-Control y selecciona aquel. Sin embargo, el panel registra un solo resultado: «política de caché: 600 segundos».

La cabecera no falta a la verdad. El panel ha borrado el proceso de decisión que le da significado.

La RFC 9213 define los campos dirigidos de control de caché como campos de respuesta cuyo nombre identifica el tipo de caché al que se aplican. CDN-Cache-Control es el ejemplo normalizado. Su valor emplea la semántica de las directivas de caché, pero una implementación mantiene además una lista ordenada de objetivos. Esa lista puede ser fija, configurable o generada para cada petición. Si aparecen varios campos reconocidos, la caché elige el primero que tenga un valor válido y no vacío según ese orden.

La selección tiene una consecuencia importante. Cuando la caché selecciona un campo dirigido, usa su valor para decidir la política de la respuesta e ignora Cache-Control y Expires en esa respuesta. Si ninguno de sus campos está presente con un valor válido y no vacío, vuelve a los mecanismos HTTP ordinarios de la RFC 9111. Dos cachés conformes pueden recibir exactamente los mismos bytes y decidir de manera distinta porque sus listas no coinciden.

El alcance es tan relevante como la prioridad. Un campo dirigido que no figura en la lista de una caché no debe alterar su conducta y debe reenviarse. Una caché ajena al CDN puede ver CDN-Cache-Control sin aplicarlo. A su vez, un CDN que sí lo usa suele reenviarlo a otros CDN posteriores, pero la RFC 9213 permite retirarlo cuando no conviene conservarlo. El campo observado en un punto no prueba el conjunto que vio cada salto anterior o posterior.

El análisis sintáctico crea otra frontera. Los campos dirigidos son diccionarios Structured Fields. Aunque suelen parecerse a Cache-Control, el tratamiento de errores no es intercambiable. Un campo vacío o inválido se ignora y puede activar la política alternativa. Un panel que conserva el texto pero no el veredicto del analizador puede atribuir una conducta a un campo que la caché nunca aceptó.

La frescura también depende de la caché que seleccionó la política. El ejemplo de la RFC 9213 permite que un CDN considere fresca una respuesta durante 3.600 segundos, otras cachés compartidas durante 600 y las restantes durante 60. Tras 1.800 segundos, la respuesta es fresca para el CDN y está caducada en otros lugares. No es una contradicción, sino la aplicación de políticas diferentes. El error operativo es convertirlas en un único estado para toda la cadena.

Esa simplificación puede transformarse en un fallo de seguridad. La RFC 9213 advierte que varias políticas en una respuesta pueden causar confusión y reutilización involuntaria de información sensible. Una prueba correcta en el origen demuestra que se emitieron los campos previstos, pero no cuáles reconoció cada caché, cuál eligió, si el análisis tuvo éxito, si alguien retiró el campo ni si la reutilización observada respetó el límite deseado.

La unidad práctica de evidencia es, por tanto, un registro de decisión de caché por salto. Para cada caché material debe vincular clase e identidad, lista ordenada de objetivos, campos recibidos, resultado del análisis, campo elegido, directivas efectivas, entradas de frescura, ruta alternativa, reenvío o eliminación y una observación de almacenamiento o reutilización. Los saltos desconocidos deben permanecer explícitos.

Este registro es un control operativo editorial, no un objeto definido por el IETF. Evita que un campo válido se convierta en una afirmación no demostrada sobre toda la cadena.

Fuentes