2009-12-09 17 views
6

¿Hay alguna manera (una cabecera HTTP) para indicar a los navegadores no distinguir entre main.css y main.css?someparam=1 cuando se realiza el almacenamiento en caché.Cómo instruir a los navegadores ignorar parámetros GET cuando el almacenamiento en caché un recurso

Según w3c spec:

ya que algunas aplicaciones se han utilizado tradicionalmente obtiene y cabezas con direcciones URL de consulta (aquellas que contienen una en la parte rel_path "?") Para realizar operaciones con efectos secundarios significativos, cachés, no deberán tratar respuestas a dichos URI como nuevos a menos que el servidor proporcione un tiempo de caducidad explícito. Esto significa específicamente que las respuestas de los servidores HTTP/1.0 para dichos URI NO DEBEN tomarse de un caché

My Firefox 3.5.5 recupera los archivos del servidor, si el parámetro GET cambia. Si no cambia, sirve el contenido del caché. (verificado eso con FireBug).

Entonces, hay una manera de hacer frente a esto (sin eliminar el parámetro get).

+3

¿Por qué estás enviando el parámetro si se va a ignorarlo y proporcionar la misma copia de todos modos? –

+0

es complicado :) está relacionado con el uso de un ámbito de conversación en el servidor, y el marco de conversación requiere el parámetro perameter (MyFaces Orchestra for JSF en este caso) – Bozho

+0

en realidad está anexado por el marco, e incluso si tuviera controlarlo, rompería la funcionalidad de la conversación. – Bozho

Respuesta

3

No está del todo claro qué lado requiere parámetros en la URL: ¿servidor o cliente? De todos modos, su servidor puede comportarse de manera que el cliente maneje la misma URL y no necesite ningún encabezado mágico que no exista. ;)

Si el servidor requiere params, se puede añadir que el parámetro con Apache reescritura de URL, si se utiliza Apache:

RewriteRule ^style.css$ /style.css?param=1 [L] 

Hay otras cosas de reescritura del motor puede hacer, e incluso se puede pasar los parametros a través galletas y extraerlos en líneas RewriteCond en cadena de consulta:

RewriteCond %{HTTP_COOKIE} a:(.*) # not sure of the syntax 
RewriteRule ^style.css$ /style.css?a=%1 [L] 

de esta manera la URL será el mismo en el lado del cliente.

Si el cliente envía peticiones con params, y no se puede trabajar de una manera diferente, se puede poner una redirección externa y una cookie:

RewriteCond %{QUERY_STRING} a=(.*) 
RewriteRule ^(.*)$ /$1 [CO=a:%1:mysite.com,R] 

De esta manera el navegador tendrá en cuenta el almacenamiento en caché/No almacenar en caché la URL sin ningún parámetro. Lee Rewrite Engine docs, hay otras funciones útiles.

Cuestiones relacionadas