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 : [$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 : 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 : 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 : 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