Tous les produits
Search
Centre de documentation

Object Storage Service:Comment obtenir des ressources OSS en segmentant les requêtes HTTP Range

Dernière mise à jour :Oct 10, 2026

Remarque

Avertissement : Cette rubrique peut contenir des informations relatives à des produits tiers. Ces informations sont fournies à titre de référence uniquement. Alibaba Cloud ne garantit en aucun cas les performances et la fiabilité des produits tiers, ni les impacts potentiels des opérations sur ces produits.

Présentation

Cette rubrique explique comment obtenir des ressources OSS en segmentant les requêtes HTTP Range.

Message

Lorsque vous téléchargez ou chargez un objet volumineux (supérieur à 100 Mo) depuis ou vers OSS, le transfert peut échouer si l'environnement réseau est instable. Pendant le chargement, appelez l'opération MultipartUpload pour effectuer un chargement multipartie. Lors du téléchargement d'une ressource, utilisez une requête HTTP Range pour récupérer une partie du contenu d'un fichier volumineux. Voici un exemple :

Get /ObjectName HTTP/1.1
Host:xxxx.oss-cn-hangzhou.aliyuncs.com
Date:Tue, 17 Nov 2015 17:27:45 GMT
Authorization:SignatureValue
Range:bytes=[$ByteRange]
Remarque

Remarque : [$ByteRange] indique la plage de ressources demandée. L'unité est l'octet. Exemples :

  • Range: bytes=0-499 spécifie les 500 premiers octets.

  • Range: bytes=500-999 spécifie les 500 octets suivants.

  • Range: bytes=-500 spécifie les 500 derniers octets.

  • Range: bytes=500- spécifie les données allant du 500e octet jusqu'à la fin de l'objet.

  • Range: bytes=0- indique le premier au dernier octet, soit le contenu complet du fichier.

  • Vous ne pouvez spécifier qu'une seule plage dans une requête GetObject. Si vous spécifiez plusieurs plages, OSS renvoie uniquement les données de la première plage. Par exemple, avec Range:bytes=0-499 500-999, OSS renvoie uniquement les données comprises entre 0 et 499 octets.

  • [$ByteRange] L'intervalle valide se situe entre 0 et content-length - 1.

Si la requête HTTP Range est valide, la réponse retourne le code 206 et inclut l'en-tête Content-Range. Si la requête HTTP Range est invalide ou si la plage spécifiée n'est pas dans l'intervalle valide, la plage n'est pas prise en compte. La réponse retourne alors le code 200 et transmet l'intégralité du contenu de l'objet. L'exemple suivant illustre une requête HTTP Range invalide et décrit l'erreur correspondante.

Remarque

Remarque : Supposons que la taille de la ressource d'un objet soit de 1 000 octets et que la plage valide soit de 0 à 999. Pour éviter que la plage Range spécifiée ne soit hors limites, effectuez une requête HeadObject afin d'obtenir la taille de l'objet avant de lire la plage.

  • Range: byte=0-499 : Le format est invalide. La valeur doit être « bytes » et non « byte ».

  • Range: bytes=0-1000 : Le dernier octet (1000) dépasse l'intervalle valide.

  • Range: bytes=1000-2000 : La plage spécifiée dépasse l'intervalle valide.

  • Range: bytes=1000- : Le premier octet dépasse l'intervalle valide.

  • Range: bytes=-2000 : La plage spécifiée dépasse l'intervalle valide.

Exécutez la commande suivante pour tester la validité du paramètre Range :

curl -r 0-100 http://xxxx.oss-cn-hangzhou.aliyuncs.com/xx.zip -o /tmp/xx1.zip -v

Comportement compatible

Lors de l'utilisation d'HTTP Range, l'ajout de l'en-tête de requête x-oss-range-behavior:standard permet de modifier le comportement d'OSS lorsque la plage spécifiée n'est pas dans l'intervalle valide. Voici des exemples de modifications de comportement :

Remarque

Remarque : Supposons que la taille de la ressource de l'objet soit de 1 000 octets et que la plage valide soit de 0 à 999. Par exemple, OSS renvoie le code d'erreur InvalidRange car une plage invalide a été sélectionnée lors de l'utilisation d'une requête HTTP Range pour obtenir une partie du contenu d'un fichier volumineux. Pour plus d'informations, consultez la rubrique OSS renvoie une erreur 416 afin de résoudre l'erreur. Les détails de l'erreur sont les suivants :

The requested range cannot be satisfied

  • Range: bytes=500-2000 : Si le dernier octet dépasse la plage valide, les octets 500 à 999 sont renvoyés.

  • Range: bytes=1000-2000 : L'erreur 416 (InvalidRange) est renvoyée si le premier octet dépasse l'intervalle valide.

  • Range: bytes=1000- : L'erreur 416 (InvalidRange) est renvoyée si le premier octet dépasse l'intervalle valide.

  • Range: bytes=-2000 : Si la plage spécifiée dépasse l'intervalle valide, les octets 0 à 999 sont renvoyés, ce qui correspond au contenu complet du fichier.

Exemples

Cette rubrique fournit les exemples suivants de requêtes HTTP Range.

Remarque

Remarque : Supposons que la taille de la ressource de l'objet soit de 1 000 octets et que la plage valide soit de 0 à 999.

Requêtes normales

  • Le contenu compris entre les octets 0 et 499 de la ressource Object demandée.

    GET /ObjectName
    Range: bytes=0-499
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 02:51:30 GMT
    Authorization: Sigature
    
    206 (Partial Content)
    content-length: 500
    content-range: bytes 0-499/1000
    connection: keep-alive
    etag: "CACF99600561A31D494569C979E6FB81"
    x-oss-request-id: 5DA928B227D52731327DE078
    date: Fri, 18 Oct 2019 02:51:30 GMT
    [500 bytes of object data]
  • Le contenu allant du 500e octet de la ressource Object demandée jusqu'à la fin du fichier.

    GET /ObjectName
    Range: bytes=500-
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 03:24:39 GMT
    Authorization: Signature
    
    206 (Partial Content)
    content-length: 500
    content-range: bytes 500-999/1000
    etag: "CACF99600561A31D494569C979E6FB81"
    x-oss-request-id: 5DA9307750EBE33332E3720A
    date: Fri, 18 Oct 2019 03:24:39 GMT
    [500 bytes of object data]
  • Le contenu des 500 derniers octets de la ressource Object demandée.

    GET /ObjectName
    Range: bytes=-500
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 03:23:22 GMT
    Authorization: Signature
    
    206 (Partial Content)
    content-length: 500
    content-range: bytes 500-999/1000
    etag: "CACF99600561A31D494569C979E6FB81"
    x-oss-request-id: 5DA9302A6646AC37397F7039
    date: Fri, 18 Oct 2019 03:23:22 GMT
    [500 bytes of object data]

Exemple de requête hors plage

  • Si le dernier octet (1000) dépasse l'intervalle valide, la plage Range n'est pas prise en compte. La réponse retourne le code 200 et transmet l'intégralité du contenu de l'objet.

    GET /ObjectName
    Range: bytes=0-1000
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 03:00:02 GMT
    Authorization: Signature
    
    200 (OK)
    content-length: 1000
    etag: "CACF99600561A31D494569C979E6FB81"
    x-oss-request-id: 5DA92AB204321E36347F3E7D
    date: Fri, 18 Oct 2019 03:00:02 GMT
    [1000 bytes of object data]
  • Si la plage spécifiée dépasse l'intervalle valide, la plage Range n'est pas prise en compte. La réponse retourne le code 200 et transmet l'intégralité du contenu de l'objet.

    GET /ObjectName
    Range: bytes=1000-2000
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 02:56:24 GMT
    Authorization: Sigature
    
    200 (OK)
    content-length: 1000
    etag: "CACF99600561A31D494569C979E6FB81"
    x-oss-request-id: 5DA929D9CCCC823835CBE134
    date: Fri, 18 Oct 2019 02:56:25 GMT
    [1000 bytes of object data]

Exemple de requête avec comportement compatible

  • Ajoutez l'en-tête de requête x-oss-range-behavior:standard. Si le dernier octet dépasse l'intervalle valide, le contenu compris entre les octets 500 et 999 est renvoyé.

    GET /ObjectName
    x-oss-range-behavior: standard
    Range: bytes=500-2000
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 07:02:23 GMT
    Authorization: Signature
    
    206 (Partial Content)
    content-length: 500
    content-range: bytes 500-999/1000
    etag: "CACF99600561A31D494569C979E6FB81"
    x-oss-request-id: 5DA9637FB3B1C73234CC59EB
    date: Fri, 18 Oct 2019 07:02:23 GMT
    [500 bytes of object data]
  • Ajoutez l'en-tête de requête x-oss-range-behavior:standard. Si le premier octet dépasse l'intervalle valide, une erreur 416 est renvoyée.

    GET /ObjectName
    x-oss-range-behavior: standard
    Range: bytes=1000-2000
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 07:04:23 GMT
    Authorization: Signature
    
    416 (Requested Range Not Satisfiable)
    content-length: 345
    x-oss-request-id: 5DA963F7CEBFAA3931BF91F5
    date: Fri, 18 Oct 2019 07:04:23 GMT
    content-type: application/xml
    <?xml version="1.0" encoding="UTF-8"?>
    <Error>
      <Code>InvalidRange</Code>
      <Message>The requested range cannot be satisfied</Message>
      <RequestId>5DA963F7CEBFAA3931BF91F5</RequestId>
      <HostId>bucket.oss-cn-hangzhou.aliyuncs.com</HostId>
      <ActualObjectSize>1000</ActualObjectSize>
      <RangeRequested>bytes=1000-2000</RangeRequested>
    </Error>
  • Ajoutez l'en-tête de requête x-oss-range-behavior:standard. Si la plage spécifiée dépasse l'intervalle valide, les octets 0 à 999 sont renvoyés, c'est-à-dire le contenu complet du fichier.

    GET /ObjectName
    x-oss-range-behavior: standard
    Range: bytes=-2000
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 07:06:39 GMT
    Authorization: Signature
    
    206 (Partial Content)
    content-length: 1000
    content-range: bytes 0-999/1000
    etag: "CACF99600561A31D494569C979E6FB81"
    x-oss-request-id: 5DA9647FC4334F3534AF9A83
    date: Fri, 18 Oct 2019 07:06:39 GMT
    [1000 bytes of object data]

Champ d'application

  • OSS