Est-il OK de retourner un code 301/302/303 lors du retour d'une ressource d'image? Je l'ai fait dans le passé et cela semble fonctionner. Est-ce une bonne pratique et est-il compatible avec la plupart des navigateurs?
Oui, vous pouvez rediriger les images et les navigateurs suivront les redirections. Mais vous souhaiterez généralement garder la redirection au minimum pour des raisons de performances, car chaque redirection nécessite une demande HTTP distincte, ce qui ajoute une surcharge au serveur et augmente un peu le temps de chargement de la page de l'utilisateur final.
La seule chose que vous devez absolument éviter est de rediriger de nombreuses images sur une page. Cela ralentira considérablement le temps de chargement des pages, en particulier sur les réseaux à latence élevée (par exemple, téléphone, Chine, Internet par satellite) où chaque nouvelle demande HTTP prend beaucoup de temps. De plus, les clients HTTP sont limités à un petit nombre de connexions HTTP simultanées par nom d'hôte de serveur, donc même sur les réseaux rapides, vous vous retrouverez avec un goulot d'étranglement.
Rediriger 1 ou 2 images sur une page n'est cependant pas un gros problème.
Si vous redirigez des images et qu'elles peuvent être mises en cache, vous devriez idéalement définir un en-tête HTTP Expires (et l'en-tête Cache-Control approprié) pour une date dans un avenir lointain, donc au moins lors des visites suivantes sur la page, les utilisateurs n'auront pas pour recommencer la redirection.
Si la raison de la redirection est de se conformer à un nouveau schéma d'URL, la plupart des serveurs Web ont un moyen simple de réécrire les URL sur le serveur sans avoir à renvoyer une redirection réelle au client. En d'autres termes, le client peut demander /static/bar.jpg
mais le serveur peut être configuré pour traduire cela en /media/images/bar.jpg
. Cette approche de réécriture d'URL est préférable à la redirection dans la plupart des cas, car vous pouvez refactoriser l'emplacement de votre contenu sur le serveur sans encourir la surcharge de redirection côté client ou serveur.
Oui cela fonctionne.
Pour être une bonne pratique, quelles sont les alternatives? Retour d'une réponse d'erreur (404)? Pas très utile. Renvoyer l'image que la ressource redirigée retournerait? Probablement pas possible, sinon vous ne redirigeriez pas. Correction des balises img avec la nouvelle URL? Bien sûr, dans la mesure du possible, mais vous souhaitez peut-être que le navigateur analyse la redirection (un compteur peut-être).
Ce n'est pas grave si le code reflète réellement la réalité - par exemple, si une image s'est effectivement déplacée de façon permanente, vous devriez utiliser un 301.