2017-04-14 5 views
0

Plusieurs variantes de cette question ont été posées, mais je n'arrive pas à trouver une réponse satisfaisante.Comment puis-je créer un Redirect temporaire dans .htaccess auquel tous les navigateurs adhèrent?

j'ajouter ce qui suit à mon fichier .htaccess

Redirect 302 /test1 /test 

Ensuite, accédez au site Web. Je suis redirigé vers/test.
Ensuite, je supprime la redirection et je repasse sur le site Web. Dans Chrome, Firefox et Internet Explorer (Dernières versions le 14/04/2017), les navigateurs utilisent la redirection mise en cache et m'envoie/test. Sur Edge, j'obtiens/test1.

Comme mentionné dans d'autres questions, c'est kindof ok, par the RFC:

Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. 

Notez que "DEVRAIT" dans la RFC lingo signifie qu'il est conseillé, mais pas obligatoire. Donc, il est conseillé pas de mettre en cache la redirection (et donc, aller à/test1), mais il est ok pour le mettre en cache de toute façon. Je ne comprends pas pourquoi les navigateurs ne suivraient pas la suggestion de RFC ici, ... mais il y a ça.

Ensuite, il y a le 303 Redirect:

The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable. 

J'ai testé. compte tenu de la RFC, cette redirection NE DOIT PAS (comme dans jamais) être mis en cache. Edge et Firefox jouent bien ici, et ne le cache pas. Internet Explorer et Chrome semblent décider d'ignorer carrément le RFC ici, et continuer à m'envoyer à/test.

Est-ce que ces bogues sont connus?
Ai-je mal compris le RFC?
Y at-il un façon, pour s'assurer que mes redirections ne sont pas mises en cache?

La seule solution utilisant une RewriteRule? Les navigateurs ne peuvent pas mettre en cache les URL cibles, car ils ne les voient jamais et n'ont pas tendance à mettre en cache l'emplacement cible. Cela fonctionne donc pour moi. (Merci à @Olaf Dietsche)

RewriteRule ^test1 /test 

(Dans mon cas d'utilisation, je veux rediriger quelque chose comme website.com/file.pdf à un autre fichier. Il n'y a pas de page HTML que je peux ajouter un no-cache paramètre. les utilisateurs tapent cette URL dans leur navigateur manuellement)

+1

Si vous souhaitez réécrire au lieu de rediriger, consultez ['RewriteRule'] (https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule) –

+0

Stupide (de moi;)) . En fait, j'ai réussi à travailler avec RewriteRule. J'avais l'habitude d'utiliser l'indicateur R, mais pour mon cas d'utilisation * not * l'utilisation de l'indicateur R est encore meilleure (puisque l'URL continue à chercher "bien rangé" et ne change pas dans le fichier cible). Et, les navigateurs ne le mettent pas en cache; parfait! Donc, mon problème spécifique est résolu, mais la question sur la redirection 303 reste ouverte ... – Wouter

Répondre

2

the RFC (2616) déclare

ce document a été remplacé.

Précisément, c'est RFC 7231, qui indique explicitement "Obsoletes: 2616".Et dans ce cas, les sections pertinentes sont 303 See Other et surtout Appendix B. Changes from RFC 2616

La description de la 303 (Voir Autres) code d'état a été modifié pour lui permettre d'être mis en mémoire cache si l'information de fraîcheur explicite est donnée, et une définition spécifique a été ajoutée pour une réponse 303 à GET. (Section 6.4.4)

Dans certains cas, la mise en cache d'une réponse 303 est autorisée.

+0

Spot on answer. J'espérais donc avoir trouvé un bug dans 3 navigateurs majeurs :) (Kinda savait que ce ne serait pas le cas) Donc, pour compléter cette réponse, je vais conclure qu'une redirection * real * temporaire n'est pas possible par des moyens d'une redirection. Il y a * beaucoup * de sites Web qui expliquent que 302 sont temporaires ... il semble qu'ils sont tous faux (au moins, en pratique, pour la plupart des navigateurs). – Wouter

+0

Je pense qu'une réponse 302 est toujours considérée comme temporaire, comme écrit dans "[6.4.3. 302 Trouvé] (https://tools.ietf.org/html/rfc7231#section-6.4.3) - Depuis la redirection être modifié à l'occasion, le client doit continuer à utiliser l'URI de demande effective pour les demandes futures. ", bien que ce ne soit pas aussi fort que * must * ou * required *, bien sûr. –

+0

C'est le gros problème que je vois avec ça. Il est recommandé comme étant temporaire, et presque tous les didacticiels vous le diront, mais il semble que tous les navigateurs sauf Edge le traitent comme un 301. Donc, en pratique, ils ne sont pas du tout temporaires ... – Wouter