Retry-after-tête de réponse HTTP - t-il sur quelque chose?
Si je veux poliment refuser le service sur un site web en raison de surcharge temporaire, la réponse HTTP 503 Service Non Disponible semble le plus approprié. La spec mentionne l'envoi d'un Retry-après en-tête avec le 503.
Est-il point? N'Retry-after affecter quoi que ce soit? Les navigateurs prêter attention?
Vous devez vous connecter pour publier un commentaire.
pour autant Que je sache, aucun navigateur n'accorde de l'attention à unRetry-after
en-tête. Les procurations et les caches, maisApparemment, certains navigateurs incluent maintenant un certain niveau de soutien pour
Retry-After
(même si le soutien est encore douteux, au mieux). Je ne suis pas entièrement convaincu de l'intérêt de le faire dans un navigateur; en général, il est considéré comme une mauvaise idée de défauts de cache. Mais si vous savez, quand vous serez à l'acceptation des demandes de nouveau, en disant que le client ne peut faire de mal. (Si vous revenir plus tôt que prévu, cependant, tout programme qui fait les honneurs de l'en-tête doit assumer -- et -- rapport que le site est toujours en baisse.)L'avantage le plus évident est, il semble Googlebot (et éventuellement d'autres araignées) attention à l'en-tête s'il est là, qui peut l'empêcher de l'onu-l'indexation de la page pendant un certain temps.
Avec tout ce que dit...si c'est facile d'ajouter, et vous pouvez venir avec un raisonnablement estimer avec précision quand le service sera disponible, aller pour elle. Je ne recommanderais pas de sortir de votre façon de le faire, cependant. C'est seulement consultatif de toute façon, et de mettre le mauvais temps dans il pourrait causer plus de problèmes que de ne pas y compris l'en-tête à tous.
L'état actuel de la Retry-After en-tête
La mise en œuvre de la Retry-After en-tête des clients et des serveurs a un peu changé au cours des dernières années, depuis la première publication de cette question. J'ai donc pensé que je pourrais fournir une mise à jour de réponse.
Tout d'abord, la RFC 2616, section 14.37 Retry-Après états:
De soutien dans les logiciels client et serveur
Suivantes sont référentiel de code commettre des messages, des annonces, et des documents concernant la Retry-After en-tête de divers logiciels.
Chrome/Chrome
Un code de validation sur Nov 22, 2012 avec le message de log:
Ajouter la détection des dépassements de délai et de l'utilisation de Retry-After-tête HTTP.
Mozilla/Firefox
Un code de validation sur Mar 27, 2012 avec le journal messeage: Mettre en œuvre la Manipulation de 5xxs, X-Weave-Interruption, Retry-Après. En outre, il y a trois autres mentions de Retry-After-tête dans leur dépôt Mercurial.
Un bug a été initialement soumis le 6 janvier 2004 avec le titre Retry-Après l'envoi de avec HTTP 503 réponse est ignoré.
Googlebot
Google Webmaster Central Blog l'article sur la façon de traiter avec des temps d'indisponibilité du site, mentionne que les Retry-After-tête peut être utilisé pour déterminer quand analysez de nouveau l'URL.
Bingbot/Msnbot
Ne pouvait pas trouver un officiel Retry-Après le document d'appui. Cependant, il y avait quelques mentions dans les forums au hasard sur l'utilisation de cet en-tête dans un 503 réponse à l'accélérateur de Microsoft bots.
Nginx
La add_header directive états:
Donc, pour ajouter le Retry-After-tête pour un 503 réponse à l'aide de la version:
1.7.4 et précédemment, l'utilisation d'un module tiers, tels que Les En-Têtes De Plus.
1.7.5 et, plus tard, ajouter les
always
paramètre à laadd_header
directive.Apache
Contrairement à Nginx, Apache l'en-tête de la documentation ne donne aucune indication qu'il ne peut pas envoyer un Retry-After-tête sur une réponse 503. En matière de non-réponses 2xx, cependant, les docs de l'état:
Ici est un DONC réponse qui définit un Retry-After-tête avec le toujours condition 503 réponses, comme la doc conseille.
Un AskApache article fournit d'autres exemples de configuration de la façon de instruire les moteurs de recherche à revenir à l'aide d'un 503 réponse avec un Retry-After-tête.
Client de test
J'ai écrit un Rubis serveur qui retourne simplement une réponse 503 avec un Retry-After-tête set de 10 secondes et un corps contenant un nombre aléatoire.
J'ai consulté sur:
Je m'attendais à ces navigateurs pour actualiser automatiquement l'URL après 10 secondes et l'affichage d'un nouveau nombre aléatoire. Cependant, tous les navigateurs n'ont pas réessayer, même après plusieurs minutes. J'ai essayé à court et à long Retry-Après des périodes ainsi avec les mêmes résultats. Le serveur de log d'accès à a confirmé aucune nouvelle tentative a été faite à partir de ces navigateurs.
Aussi, un "doux" actualiser avant de le Réessayer Après la période de refetched l'URL immédiatement. Ainsi, le Retry-After-tête ne peut pas être utilisé à gaz "de l'actualisation de heureux" des utilisateurs. Je mentionne cela parce que j'ai vu dans certains forum que cet en-tête peut être utilisé pour limiter les usagers impatients de marteler votre site.
Comme une note de côté, il semble logique pour un "soft" que l'actualisation n'avons pas d'action avant le délai d'expiration, mais un "dur" ou cache-contournement de rafraîchissement serait ignorer le délai d'attente et immédiatement récupère à nouveau l'URL.
Conclusion
De soutien pour la Retry-After en-tête semble encore un peu louche sur les clients et serveurs. Néanmoins, il est une bonne idée de fixer un délai de tentatives pour 503 réponses si il n'est pas difficile à configurer.
Même si Googlebot est le seul client de l'appui-tête et en fait de réessayer après le délai imparti, il peut maintenir vos pages de dé-indexé, contrairement à une 404, 500, 502, ou 504 réponse.
Je vois cela comme un œuf et de la poule problème: Aucun des navigateurs actuellement en œuvre Retry-after depuis, aucun site web ne dérange pas. À mon avis, aller de l'avant et de l'envoyer en tant que service aux utilisateurs. Si le choix de leur navigateur web n'a pas la mettre en œuvre, alors que c'est leur navigateur suffit pas de leur donner des informations utiles. Vous l'avez fait!
Lorsque vous cherchez à mettre en œuvre des normes qui ont de multiples concurrents, les implémentations, j'essaie toujours de respecter les normes, et ne pas prêter attention aux différentes implémentations (sauf que je suis précisément en essayant d'imiter une mise en œuvre, comme le cURLing, mais de déguiser mes en-têtes de ressembler à un navigateur web). Sinon, nous nous retrouvons avec de facto des normes qui, si vous vous souvenez de l'IE-le dominence jours, vous ne voulez pas!
Si vous voulez envoyer un actualiser automatiquement après X temps, vous pouvez envoyer un
en PHP:
Pour rafraîchir la page, vous pouvez utiliser
$_SERVER["REQUEST_URI"]
pour $url.J'ai testé cette en-tête de succès dans les différentes versions de l'Opéra, Firefox et Internet Explorer.
Cet en-tête Fonctionne même pour l'actualisation des contenus binaires comme les images (mais seulement lorsque le où chargés directement ou dans un cadre - une IMG-Tag de ne pas recharger).