206 Partial Content et requêtes Range HTTP
206 Partial Content : le serveur n’envoie que la plage d’octets demandée, comme pour les lecteurs vidéo et les téléchargements reprenables.
206 Partial Content signifie que le serveur n’envoie qu’une partie d’un fichier, parce que le client a demandé une plage d’octets précise. C’est ainsi que les lecteurs vidéo se déplacent dans un média, que les gestionnaires de téléchargement reprennent un fichier interrompu et que les visionneuses PDF récupèrent un document morceau par morceau.
Définition
La RFC 9110, section 15.3.7 précise que le serveur « satisfait avec succès une requête de plage » en transférant une ou plusieurs parties de la représentation. Le client envoie un en-tête Range ; le serveur répond avec Content-Range, qui indique les octets envoyés, ou avec un corps multipart/byteranges pour plusieurs plages. Les serveurs signalent cette prise en charge avec Accept-Ranges: bytes, et une plage impossible à servir reçoit un 416 Range Not Satisfiable.
GET /media/intro.mp4 HTTP/1.1
Host: www.example.com
Range: bytes=0-1048575
HTTP/1.1 206 Partial Content
Content-Type: video/mp4
Content-Range: bytes 0-1048575/48211533
Content-Length: 1048576
Accept-Ranges: bytes
Où la prise en charge des plages compte
- Vidéo et audio : les lecteurs demandent des plages pour démarrer vite et se déplacer dans le média. Safari, en particulier, attend la prise en charge des plages pour les fichiers vidéo.
- Gros téléchargements qui doivent reprendre après une coupure de connexion.
- PDF ouverts dans la visionneuse d’un navigateur.
Apache et Nginx gèrent les plages pour les fichiers statiques sans configuration. Les problèmes viennent en général du code applicatif qui diffuse des fichiers sans lire Range, ou de proxys qui le suppriment.
Impact SEO
Un 206 est la réponse normale à une requête de plage : ce n’est donc pas une erreur. Le risque est inverse : un serveur ou un cache qui envoie 206 et un fragment à une requête sans en-tête Range. Un robot qui récupère votre HTML obtient alors une page tronquée. Un simple GET sur une page doit renvoyer 200 avec le document complet. La documentation de Google sur les codes de statut ne traite pas du 206 : ne comptez donc pas sur un traitement particulier. (Ne le confondez pas avec 304 Not Modified, qui n’envoie aucun corps puisque la copie en cache du client est toujours à jour.)
Comment vérifier
Le vérificateur d’en-têtes HTTP indique si un fichier annonce Accept-Ranges: bytes, et le vérificateur de statut HTTP confirme qu’une requête normale renvoie 200. Pour tester vous-même une plage :
curl -s -o /dev/null -w "%{http_code}\n" -r 0-1023 https://www.example.com/media/intro.mp4
206 Questions fréquentes
Le code 206 Partial Content est-il une erreur ?
Non. C’est une réponse de succès à une requête de plage, utilisée pour le streaming vidéo, les téléchargements reprenables et les visionneuses PDF.
Pourquoi ma vidéo ne se lit pas ou ne permet-elle pas d’avancer dans Safari ?
Une cause fréquente est un serveur ou un script qui ignore l’en-tête Range et envoie toujours le fichier entier avec un 200. Assurez-vous que les fichiers multimédias sont servis avec la prise en charge des plages, pour que le serveur puisse répondre 206.
Une réponse 206 peut-elle nuire au SEO ?
Seulement si un serveur envoie 206 et une page partielle à une requête normale sans en-tête Range : les robots obtiennent alors un HTML tronqué. Les requêtes de page ordinaires doivent recevoir 200 et le document complet.