Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
En-tête Range
Baseline Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
L'en-tête de requête HTTPRange indique la partie d'une ressource que le serveur doit retourner.Plusieurs parties peuvent être demandées en même temps dans un seul en-têteRange, et le serveur peut renvoyer ces plages dans un document multipartie.Si le serveur renvoie des plages, il utilise le code d'état206 Partial Content pour la réponse.Si les plages sont invalides, le serveur retourne l'erreur416 Range Not Satisfiable.
Un serveur qui ne prend pas en charge les requêtes de plage peut ignorer l'en-têteRange et retourner la ressource entière avec un code d'état200.Les anciens navigateurs utilisaient un en-tête de réponseAccept-Ranges: none pour désactiver des fonctionnalités comme « pause » ou « reprendre » dans les gestionnaires de téléchargement, mais comme le fait qu'un serveur ignore l'en-têteRange a la même signification que de répondre avecAccept-Ranges: none, cet en-tête est rarement utilisé de cette manière.
Actuellement, seules lesunitésbytes sont enregistrées(angl.), ce sont desdécalages (indexés à partir de zéro et inclusifs).Si les données demandées ont uncodage de contenu appliqué, chaque plage d'octets représente la séquence d'octets encodés, et non les octets obtenus après décodage.
L'en-tête est unen-tête de requête autorisé par CORS lorsque la directive spécifie une seule plage d'octets.
| Type d'en-tête | En-tête de requête |
|---|---|
| En-tête de requête interdit | Non |
Dans cet article
Syntaxe
Range: <unit>=<range-start>-Range: <unit>=<range-start>-<range-end>Range: <unit>=<range-start>-<range-end>, …, <range-startN>-<range-endN>Range: <unit>=-<suffix-length>Directives
<unit>L'unité dans laquelle les plages sont définies. Actuellement, seule l'unité
bytesest enregistrée.<range-start>Un entier dans l'unité donnée indiquant la position de début de la plage demandée.
<range-end>Un entier dans l'unité donnée indiquant la position de fin de la plage demandée. Cette valeur est optionnelle et, si elle est omise, la fin de la ressource est utilisée comme fin de la plage.
<suffix-length>Un entier indiquant le nombre d'unités à la fin de la ressource à retourner.
Exemples
Les exemples suivants montrent comment effectuer des requêtes en utilisant l'en-têteRange pour des requêtes autorisées par CORS, et pour demander plusieurs plages.D'autres exemples sont disponibles dans le guideRequêtes de plage HTTP.
Plages d'octets uniques et requêtes autorisées par CORS
L'en-têteRange est unen-tête de requête autorisé par CORS lorsque la valeur est une seule plage d'octets.Cela signifie qu'il peut être utilisé dans des requêtes inter-origines sans déclencher depré-vérification, ce qui est utile pour demander des médias et reprendre des téléchargements.
L'exemple suivant demande les 500 premiers octets d'une ressource :
Range: bytes=0-499Pour demander les 500 octets suivants :
Range: bytes=500-999Omettre la position de fin demande toutes les unités restantes de la ressource, ainsi les 100 derniers octets d'une ressource de 1000 octets peuvent être demandés avec :
Range: bytes=900-Sinon, si la taille d'une ressource est inconnue, lesn derniers octets peuvent être demandés en utilisant une plage suffixe de-n :
Range: bytes=-100Demander plusieurs plages
Pour une ressource d'une longueur de 10 000 octets, l'exemple suivant demande trois plages distinctes ;200-999 (800 octets),2000-2499 (500 octets), et enfin9500-.La valeur de spécification de plage9500- omet une position de fin ce qui indique que tous les octets à partir de 9500 font partie de la troisième plage (500 octets).
Range: bytes=200-999, 2000-2499, 9500-Cet exemple demande les 500 premiers et les 500 derniers octets du fichier.La requête peut être rejetée par le serveur si ces plages se chevauchent (par exemple, si la ressource demandée fait moins de 1000 octets).
Range: bytes=0-499, -500Vérifier si un serveur prend en charge les requêtes de plage
La commande curl suivante effectue une requêteHEAD pour une image :
curl -v --http1.1 -I https://i.imgur.com/z4d4kWk.jpg# ou en utilisant la méthode OPTIONS :# curl -v --http1.1 -X OPTIONS https://i.imgur.com/z4d4kWk.jpgCeci donne la requête HTTP suivante :
HEAD /z4d4kWk.jpg HTTP/1.1Host: i.imgur.comUser-Agent: curl/8.7.1Accept: */*Le serveur répond avec un code200, et l'en-têteAccept-Ranges: bytes est présent (certains en-têtes sont omis pour la clarté) :
HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 146515Content-Type: image/jpeg…Accept-Ranges: bytesRécupérer une plage depuis une URLblob
L'URLblob: prend également en charge les requêtes de plage en utilisantfetch().
const blob = new Blob(["Hello, world!"], { type: "text/plain" });const url = URL.createObjectURL(blob);fetch(url, { headers: { Range: "bytes=7-11", },}) .then((response) => response.text()) .then((text) => console.log(text)); // "world"Spécifications
| Specification |
|---|
| HTTP Semantics> # field.range> |
Compatibilité des navigateurs
Voir aussi
- L'en-tête conditionnel
If-Range - L'en-tête de réponse
Content-Range - L'en-tête
Content-Type - L'en-tête
Accept-Ranges - Le code de statut
206 Partial Content - Le code de statut
416 Range Not Satisfiable - Le guidedes requêtes de plage HTTP
- L'entrée de glossaireEn-tête de requête autorisé par CORS