since plus navegador modified files control cache nginx cache-control

plus - Cabeceras de control de caché repetidas; válido o no?(Nginx)



nginx plus cache (2)

Tengo un recurso en mi Nginx que está configurado así:

location ~ foo/.js$ { add_header Cache-Control public; expires 1d; }

Si abro esto con Firebug y miro los encabezados, muestra esto:

Cache-Control max-age=86400, public

El sitio usa HTTPS, así que quiero asegurarme de hacerlo bien porque, al parecer, los navegadores no lo almacenan en caché a menos que sea max-age> 0 AND public . Mira esto

Pero lo que sucede con mi Nginx cuando uso curl -Ik https://... es que dice:

... Expires: Sat, 22 Jan 2011 18:23:36 GMT Cache-Control: max-age=86400 Cache-Control: public ...

Repite el encabezado de Cache-Control ! Claramente a Firebug no le importa. Pero es correcto?

¿Existe quizás una mejor manera de configurar Expires y Cache-Control (con public ) en una sola línea?


Estaba teniendo el mismo problema en la configuración diferente. Lo que funcionó para mí es cambiar el orden de dos líneas que configuran los encabezados y colocan la configuración del encabezado justo después del corchete de apertura del "servidor". Esto establecerá los encabezados a todos los objetos, pero tal vez también funcionará en ti "if":

server { expires 31d; add_header Cache-Control public; server_name example.com ... }

Parece que add_header envía el encabezado antes de que expire la directiva para tener tiempo de cambiarla.


Sí, es válido y equivalente a usar múltiples encabezados de control de caché.

De la especificación de HTTP 1.1 :

Múltiples campos de encabezado de mensaje con el mismo nombre de campo PUEDEN estar presentes en un mensaje si y solo si el valor de campo completo para ese campo de encabezado se define como una lista separada por comas [es decir, # (valores)]. DEBE ser posible combinar los múltiples campos de encabezado en un par "nombre-campo: valor-campo", sin cambiar la semántica del mensaje, agregando cada valor de campo posterior al primero, cada uno separado por una coma.

Es fácil verificar que esta disposición se aplica al encabezado Cache-Control debido a la forma en que se define :

Control de caché = "Control de caché" ":" 1 # directiva de caché

Para comprender cómo interpretar la línea anterior, consulte las convenciones de notación de las especificaciones. El 1# significa "una lista separada por comas de uno o más".