2010-06-25 15 views
11

tengo un método en mi controlador que utiliza send_data así:¿Cómo se configura Expira: cabecera cuando se utiliza send_data

def show 
    expires_in 10.hours, :public => true 
    send_data my_image_generator, :filename => "image.gif", :type => "image/gif" 
end 

Usando expires_in resultados en las cabeceras están enviando de esta manera:

HTTP/1.1 200 OK 
Connection: close 
Date: Fri, 25 Jun 2010 10:41:22 GMT 
ETag: "885d75258e9306c46a5dbfe3de44e581" 
Content-Transfer-Encoding: binary 
X-Runtime: 143 
Content-Type: image/gif 
Content-Disposition: inline; filename="image.gif" 
Content-Length: 1277 
Cache-Control: max-age=36000, public 

Lo que me gustaría hacer es agregar un encabezado como Expires: (some exact date) para evitar que el agente de usuario se vuelva a validar. Pero no veo cómo hacer send_data establecer ese encabezado?

supongo que podría establecido explícitamente en el response.headers hachís, pero seguramente debe haber un contenedor para que (o algo así)?

Respuesta

10

Al parecer, no parece haber ninguna manera de pasar expira a send_data - en su lugar debe configurar usted mismo en response.headersy cuidar de formatear la fecha apropiada:

response.headers["Expires"] = CGI.rfc1123_date(Time.now + period) 

Tenga en cuenta que la directiva max-age en el El encabezado Cache-Control anula el encabezado Expires si ambos están presentes. Vea RFC2616 Section 14.9.3 para más detalles.

27

me encontré con esta sintaxis y me gusta :-)

response.headers["Expires"] = 1.year.from_now.httpdate 
+2

que es mucho más fresco: P – conny

+0

pones que en antes o después de send_data? – 0112

+0

Agregar antes de 'send_data'; una vez que se llama a 'send_data', no tiene sentido establecer los encabezados. – Abdo

3

El código en su pregunta en realidad debería funcionar en los últimos rieles:

`expires_in 10.hours, :public => true` 
+4

¿No es exactamente lo que hace el asker en su código original? – bredikhin

+0

En realidad, encontré que esto funciona en Rails 4.2, ¿quizás Rails ha corregido un error? Solo asegúrese de evitar que los encabezados manuales se configuren con el mismo método. Tiene el beneficio adicional de permitirle declararlo como público. – mahemoff

Cuestiones relacionadas