Range
Utilisation
L’en-tête Range permet la récupération partielle d’une ressource. Un client inclut cet en-tête pour demander des plages d’octets précises au lieu de télécharger la ressource entière. C’est essentiel pour reprendre des téléchargements interrompus, pour le streaming de médias avec prise en charge du déplacement dans la timeline, et pour charger de gros fichiers en segments parallèles.
Avant d’envoyer une requête de plage, un client vérifie la prise en charge par le serveur en consultant l’en-tête Accept-Ranges d’une réponse antérieure. La valeur bytes confirme que le serveur gère les requêtes de plages d’octets. La valeur none indique que le serveur n’accepte pas les requêtes de plage.
Lorsqu’une requête de plage aboutit, le serveur répond 206 Partial Content et inclut l’en-tête Content-Range indiquant les positions en octets ainsi que la taille totale de la ressource. Plusieurs plages dans une même requête produisent une réponse multipart où chaque partie porte ses propres en-têtes Content-Range et Content-Type.
Si la plage demandée se situe en dehors des limites de la ressource, le serveur renvoie 416 Range Not Satisfiable. Dans certains cas, le serveur ignore totalement l’en-tête Range et délivre la ressource complète avec un statut 200.
unit
L’unité précise la mesure utilisée pour les plages. bytes est l’unité standard définie dans la spécification HTTP. Des unités de plage personnalisées sont autorisées mais rarement employées.
range-start et range-end
La valeur range-start est le décalage en octets, à base zéro, où commence la plage (obligatoire). La valeur range-end est le décalage en octets, à base zéro, où se termine la plage (facultatif). Omettre range-end revient à demander tous les octets depuis range-start jusqu’à la fin de la ressource.
suffix-length
La forme suffix-length demande les N derniers octets d’une ressource. Le format -N récupère les N octets finaux sans qu’il soit nécessaire de connaître la taille totale de la ressource.
Exemple
Un client demande les 1 000 premiers octets d’un gros fichier image. Le serveur répond 206 Partial Content et précise la plage d’octets ainsi que la taille totale du fichier dans l’en-tête Content-Range.
GET /photo.jpg HTTP/1.1
Host: cdn.example.re
Range: bytes=0-999
HTTP/1.1 206 Partial Content
Content-Type: image/jpeg
Content-Length: 1000
Content-Range: bytes 0-999/250000
Un client reprend un téléchargement à partir de l’octet 50 000. Omettre la valeur de fin revient à demander tout ce qui va du décalage indiqué jusqu’à la fin de la ressource.
Range: bytes=50000-
Un client demande les 500 derniers octets d’un fichier. La forme suffixe est utile lorsque la taille totale du fichier est inconnue du client.
Range: bytes=-500
Un client demande deux plages d’octets distinctes dans une seule requête. Le serveur renvoie une réponse multipart où chaque segment constitue une partie de corps distincte.
Range: bytes=0-499, 1000-1499