2011-07-09 2 views
5

Nous travaillons à réduire le trafic «inutile». Si nous envoyons des en-têtes de contrôle de cache valides (a-la "do cache") avec une réponse 404, les navigateurs modernes mettront-ils en cache que la ressource demandée n'existe pas?envoi de cache-control/expires/pragma avec la réponse 404 - valide/compris par les navigateurs modernes?

Nous utilisons un gestionnaire personnalisé 404 basé sur php qui envoyait les en-têtes de cache en raison de la création de session, nous les avons donc supprimés. mais maintenant se demandent si pour les ressources, nous sommes CERTAINS ne sont pas valides, devrions-nous envoyer des en-têtes de cache appropriés?

ce sont des ressources publiques auxquelles le même utilisateur a accès par le même utilisateur.

merci!

+1

Veuillez nommer les en-têtes de cache que vous avez définis et comment. – hakre

Répondre

10

Les navigateurs modernes ont une implémentation de HTTP Protocol idéalement proche de la norme, même pour les serveurs proxy que vous devriez prendre en compte si vous voulez avoir un effet sur le trafic de l'utilisateur et non intentionnellement. Le version is 1.1 actuel, quelques extraits:

10,4 Erreur client 4xx

La classe 4xx du code d'état est destiné aux cas où le client semble avoir commis une erreur. Sauf lorsqu'il répond à une demande HEAD, le serveur DEVRAIT inclure une entité contenant une explication de la situation d'erreur, et s'il s'agit d'une condition temporaire ou permanente. Ces codes d'état sont applicables à n'importe quelle méthode de requête. Les agents utilisateurs DEVRAIENT afficher toute entité incluse à l'utilisateur. Si le client envoie des données, une implémentation de serveur utilisant TCP DEVRAIT veiller à ce que le client accuse réception du ou des paquets contenant la réponse, avant que le serveur ne ferme la connexion d'entrée. Si le client continue d'envoyer des données au serveur après la fermeture, la pile TCP du serveur envoie un paquet de réinitialisation au client, ce qui peut effacer les tampons d'entrée non acquittés du client avant qu'ils puissent être lus et interprétés par l'application HTTP.

Plus spécifiquement pour 404:

10.4.5 404 Introuvable

Le serveur n'a rien trouvé correspondant à la demande-URI. Aucune indication n'est donnée quant à savoir si la condition est temporaire ou permanente. Le code d'état 410 (Gone) DEVRAIT être utilisé si le serveur sait, grâce à un mécanisme interne configurable, qu'une ancienne ressource est définitivement indisponible et n'a pas d'adresse de transfert. Ce code d'état est généralement utilisé lorsque le serveur ne souhaite pas révéler exactement pourquoi la demande a été refusée ou lorsqu'aucune autre réponse n'est applicable.

Tellement pour le code de réponse 404.

Vous avez demandé:

maintenant [nous] se demandent si les ressources que nous sommes certains ne sont pas valides, devrions-nous envoyer des en-têtes de cache appropriés?

Vous n'avez pas donné d'en-têtes de cache spécifiques que vous aimeriez utiliser, il est donc un peu imprécis de répondre à votre question. La mise en cache est une section de la spécification de protocole: 13 Caching in HTTP.

En général, les éléments suivants doivent être ce que vous cherchez, extrait de 13.1.1 Cache Correctness:

Une cache correcte doit répondre à une demande avec la réponse la plus mise à jour détenu par le cache approprié à la demande (voir les sections 13.2.5, 13.2.6, et 13.12) qui remplit l'une des conditions suivantes:

...

3. It is an appropriate 304 (Not Modified), 305 (Proxy Redirect), 
    or error (4xx or 5xx) response message. 

Vous pouvez donc mettre en cache 404 messages de réponse et les signaler au cache. Les proxies et les clients devraient le gérer.

+0

Oui, cela a vraiment beaucoup de sens ... ce que nous finirons par faire est a) si pas d'if-modified-depuis en-tête, envoyer en-têtes de cache + page 404 personnalisée, b) si oui if-modified-since en-tête, envoyer 304 code d'état non modifié sans corps. Merci. –

+2

@ anonymous-one: Eh bien cela vous donnera des allers-retours HEAD pour le script php 404 qui ne fait aucun sens car il sera toujours invoqué. Si vous êtes vraiment certain que la ressource est invalide, permettez de mettre en cache pendant des jours et ne faites rien comme "si modifié depuis". Laissez-le simplement être caché. Si vous pouvez identifier la ressource recherchée par les utilisateurs, utilisez 410 Gone à la place ou 302 déplacé avec l'en-tête de lieu et le nouvel emplacement dans le corps afin de conserver le lien dans les moteurs de recherche et les ressources externes. Laissez cette réponse en cache pendant des jours aussi. – hakre

Questions connexes