J'ai lu à propos de Pragma en-tête sur Wikipedia qui dit:
"Le champ d'en-tête Pragma: no-cache est un en-tête HTTP/1.0 destiné à être utilisé dans les requêtes. Il permet au navigateur d'indiquer au serveur et à tous les caches intermédiaires qu'il souhaite une nouvelle version de la ressource, mais pas au serveur. pour indiquer au navigateur de ne pas mettre en cache la ressource. Certains agents utilisateurs font bien attention à cet en-tête dans les réponses, mais la RFC HTTP/1.1 met spécifiquement en garde contre le recours à ce comportement. "
Mais je n'ai pas compris ce que ça fait? Quelle est la différence entre l'en-tête Cache-Control
dont la valeur est no-cache
et Pragma
dont la valeur est également no-cache
?
Pragma
est l'implémentation HTTP/1.0 et cache-control
est l'implémentation HTTP/1.1 du même concept. Ils ont tous deux pour but d'empêcher le client de mettre en cache la réponse. Les clients plus anciens peuvent ne pas prendre en charge HTTP/1.1, raison pour laquelle cet en-tête est toujours utilisé.
Il n'y a pas de différence, sauf que Pragma
n'est défini que comme applicable aux requêtes du client, alors que Cache-Control
peut être utilisé à la fois par les requêtes des clients et par les réponses des serveurs.
Ainsi, en ce qui concerne les normes, elles ne peuvent être comparées que du point de vue du client qui fait une demande et du serveur qui reçoit une demande du client. Le http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 définit le scénario comme suit:
Les caches HTTP/1.1 DEVRAIENT traiter "Pragma: no-cache" comme si le client avait envoyé "Cache-Control: no-cache". Aucune nouvelle directive Pragma ne sera définie dans 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 façon dont je lisais ce qui précède:
si vous écrivez un client et avez besoin de no-cache
:
Pragma: no-cache
dans vos requêtes, car vous pourriez ne pas savoir si Cache-Control
est pris en charge par le serveur;Cache-Control
si vous écrivez un serveur:
Cache-Control
; si non trouvé, recherchez Pragma: no-cache
et exécutez la logique Cache-Control: no-cache
;Cache-Control
.Bien sûr, la réalité peut être différente de ce qui est écrit ou impliqué dans le RFC!
| Stop using | Replaced with |
| (HTTP 1.0) | (HTTP 1.1 - 1999) |
|---------------------|----------------------------------|
| Expires: [date] | Cache-Control: max-age=[seconds] |
| Pragma: no-cache | Cache-Control: no-cache |
Si c'est après 1999 et que vous utilisez toujours Expires ou Pragma, vous le faites mal.
Je te regarde 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
est un héritage de HTTP/1.0 et n'est plus nécessaire depuis Internet Explorer 5 ou Netscape 4.7. Sauf si vous vous attendez à ce que certains de vos utilisateurs utilisent IE5: vous pouvez arrêter de l'utiliser en toute sécurité.
[date]
(obsolète - HTTP 1.0) [seconds]
Et les demandes conditionnelles:
Etag: W/“1d2e7–1648e509289”
If-None-Match: W/“1d2e7–1648e509289”
304 Not Modified
last-modified: Thu, 09 May 2019 19:15:47 GMT
If-Modified-Since: Fri, 13 Jul 2018 10:49:23 GMT
304 Not Modified
dernière modification: jeu., 09 mai 2019 19:15:47 GMT