2012-04-25 15 views
113

leí sobre Pragma encabezado en Wikipedia que dice:¿Diferencia entre Pragma y los encabezados de control de caché?

"El Pragma: campo de encabezado no-cache es un 1,0 encabezado/HTTP destinada a uso en las solicitudes Es un medio para que el navegador. informe al servidor y al cachés intermedios que desea una versión nueva del recurso, , no para que el servidor indique al navegador que no almacene en caché el recurso. Algunos agentes de usuario prestan atención a este encabezado en las respuestas, pero el HTTP /1.1 RFC específicamente advierte contra confiar en este comportamiento ".

Pero no he entendido lo que hace? ¿Cuál es la diferencia entre el encabezado Cache-Control cuyo valor es no-cache y Pragma cuyo valor también es no-cache?

Respuesta

132

Pragma es la implementación de HTTP/1.0 y cache-control es la implementación HTTP/1.1 del mismo concepto. Ambos están destinados a evitar que el cliente guarde en caché la respuesta. Es posible que los clientes antiguos no sean compatibles con HTTP/1.1, por lo que ese encabezado aún está en uso.

+22

Aunque la respuesta de cnst a continuación es mucho más complicada, también es mucho más correcta según la especificación. 'Pragma: no-cache' está destinado a ser utilizado solo en solicitudes (lo que significa" Quiero el original, no una copia en caché ") y su comportamiento no se especifica para las respuestas. – clime

+4

'Cache-Control: no-cache' tiene el mismo significado para las solicitudes, pero en realidad también se define para las respuestas, lo que significa" Si desea utilizar una copia en caché de esto en el futuro, primero debe verificar conmigo que está activo- hasta la fecha (es decir, realizar la revalidación) ". – clime

+1

Es para Control de caché, no tiene que SÓLO para prevenir la caché, también se puede usar para decir "Puede guardar esto en caché". .... –

75

No hay diferencia, excepto que Pragma solo se define como aplicable a las solicitudes del cliente, mientras que Cache-Control puede ser utilizado tanto por las solicitudes de los clientes como por las respuestas de los servidores.

Por lo tanto, en lo que respecta a los estándares, solo se pueden comparar desde la perspectiva del cliente que realiza las solicitudes y el servidor que recibe una solicitud del cliente. El http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 define el escenario de la siguiente manera:

HTTP/1.1 cachés deben tratar "Pragma: no-cache", como si el cliente tenía enviado "Cache-Control: no-cache". No hay nuevas directivas Pragma serán definidas en HTTP.

Note: because the meaning of "Pragma: no-cache as a response 
    header field is not actually specified, it does not provide a 
    reliable replacement for "Cache-Control: no-cache" in a response 

La forma me gustaría leer lo anterior:

  • si usted está escribiendo un cliente y necesita no-cache:

    • sólo tiene que utilizar Pragma: no-cache en sus peticiones, ya que se puede no saber si el servidor admite Cache-Control;
    • pero en las respuestas, para decidir sobre la conveniencia de almacenar en caché, la verificación de Cache-Control
  • si usted está escribiendo un servidor:

    • en las solicitudes de análisis de los clientes, la verificación de Cache-Control; si no se encuentra, verifique Pragma: no-cache, y ejecute la lógica Cache-Control: no-cache;
    • en las respuestas, proporcione Cache-Control.

Por supuesto, la realidad puede ser diferente de lo que está escrito o implícitos en el RFC!

+4

¿Qué pasa si el encabezado tiene ambas cosas? 'Cache-Control: max-age = 86400' y ' Pragma: no-cache'? ¿Cuál será honrado por los navegadores modernos? – PKHunter

+2

@PKHunter, ¿por qué te importa qué camino tomaría si el comportamiento no está definido? Si usted es responsable del servidor, claramente puede hacerlo mejor que dar información engañosa al cliente. Además, como señalé en mi respuesta, el 'Pragma: no-cache' solo está definido para las solicitudes del navegador, y por lo tanto sería totalmente inválido e indefinido en las respuestas del servidor al navegador, por ejemplo, me imagino que cada navegador (ya sea moderno o no) debe ignorar dicho encabezado en cualquier respuesta que pueda recibir. – cnst

Cuestiones relacionadas