¿Diferencia entre Pragma y los encabezados de control de caché?

Leí sobre el encabezado de Pragma en Wikipedia que dice:

“El campo de encabezado Pragma: no-cache es un encabezado HTTP / 1.0 destinado a solicitudes. Es un medio para que el navegador le indique al servidor y a cualquier caché intermedio que quiere una versión nueva del recurso, no para el servidor para decirle al navegador que no almacene en caché el recurso. Algunos agentes de usuario prestan atención a este encabezado en las respuestas, pero el RFC HTTP / 1.1 advierte específicamente en contra de 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 ?

    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.

    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:

    Las cachés HTTP / 1.1 DEBEN tratar “Pragma: no-cache” como si el cliente hubiera enviado “Cache-Control: no-cache”. No se definirán nuevas directivas Pragma 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 en que leería lo anterior:

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

      • simplemente use Pragma: no-cache en sus solicitudes, ya que es posible que no sepa si Cache-Control es compatible con el servidor;
      • pero en las respuestas, para decidir si almacenar en caché, verifique el Cache-Control
    • si estás escribiendo un servidor:

      • al analizar las solicitudes de los clientes, verifique Cache-Control ; si no se encuentra, verifica Pragma: no-cache , y ejecuta Cache-Control: no-cache logic;
      • en las respuestas, proporcione Cache-Control .

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

     | Stop using | Replace with | | (HTTP 1.0) | (HTTP 1.1 - 1999) | |---------------------|----------------------------------| | Expires: [date] | Cache-Control: max-age=[seconds] | | Pragma: no-cache | Cache-Control: nocache | 

    Si es después de 1999, y todavía está utilizando Expires o Pragma , lo está haciendo mal.

    Te estoy mirando Stackoverflow:

     200 OK Pragma: no-cache Content-Type: application/json X-Frame-Options: SAMEORIGIN X-Request-Guid: a3433194-4a03-4206-91ea-6a40f9bfd824 Strict-Transport-Security: max-age=15552000 Content-Length: 54 Accept-Ranges: bytes Date: Tue, 03 Apr 2018 19:03:12 GMT Via: 1.1 varnish Connection: keep-alive X-Served-By: cache-yyz8333-YYZ X-Cache: MISS X-Cache-Hits: 0 X-Timer: S1522782193.766958,VS0,VE30 Vary: Fastly-SSL X-DNS-Prefetch-Control: off Cache-Control: private 

    tl; dr: Pragma es un legado de HTTP / 1.0 y no se ha necesitado desde Internet Explorer 5 o Netscape 4.7.