Probleme d'affichage des pages de redirection au lieu de rediriger (erreur 301)
Bonjour,
Sur un gros site en multi serveur, nous avons des redirections d'url courte géré aussi bien dans le BO de SPIP que sur APAChe (redirection historique) mais cela conduit dans certain cas en erreur 301.
Voici une réponse de l'hébergeur :
Bonjour, Suite aux récentes remontées (en plus des ancienne qui avait été corrigé via des redirection au niveau apache) nous nous sommes penchée en profondeur sur le problème.
Pour être clair sur le problème : La mise en cache des réponse de redirection changeait la réponse http en 200 au lieu de 301
Nous avons ouverts des ticket chez notre fournisseur en essayant de trouver pourquoi ce comportement qui ressemble a un bug. Nous n’avons pas trouvé de réponse, car impossible a reproduire hors environnement SPIP.
Après différents test il se trouve que le mécanisme de cache est sensible a la version de http spécifié dans la premiere ligne de la réponse qui est le code retour.
Une réponse commençant par HTTP/1.0 301 Moved Permanently se fera caché avec un code 200 Une réponse commençant par HTTP/1.1 301 Moved Permanently se fera caché avec un code 301
J’imagine que l’Appliance a certain problème avec un protocole de 25 ans qui définit vaguement le système de cache HTTP.
Pour corriger le comportement en préprod (uniquement possible de tester en enlevant l’authentification car les requêtes authentifié ne sont pas cachées (CF RFC 1945))
j’ai mis à jour le fichier https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/headers.php#L225 dans la méthode http_status() la ligne header("HTTP/1.0 " .
status_string[
status]); a été modifiée en : http_response_code($status);cette méthode php est présente depuis la version 5.4.0 et ne présente pas de problème particulier a part celui de répondre avec une version du protocole http un poil plus récente ( RFC 2616/7235 (1999/2014)) mais supporté par l’ensemble des navigateurs connus.
Avec @marcimat sur irc on peut simplifier le code :
function http_status($status} { return http-response-code($status); }
Quand penssez vous ?