VENTES: 1-800-867-1389

Put Page

Mis à jour: janvier 2014

L'opération Put Page écrit une plage de pages dans un objet blob de pages.

La demande Put Page peut être construite comme indiqué ci-dessous. HTTPS est recommandé. Remplacez moncompte par le nom de votre compte de stockage :

 

  URI de demande de la méthode PUT Version HTTP

https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page

HTTP/1.1

Lorsque vous élaborez une demande pour le service de stockage émulé, spécifiez le nom d'hôte de l'émulateur et le port de service BLOB sous la forme 127.0.0.1:10000, suivi du nom de compte de stockage émulé :

 

  URI de demande de la méthode PUT Version HTTP

http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=page

HTTP/1.1

Pour plus d'informations, consultez Utilisation de l'émulateur de stockage Azure pour le développement et le test.

Les paramètres supplémentaires suivants peuvent être spécifiés dans l'URI de la demande.

 

Parameter Description

timeout

Ce paramètre est facultatif. Le paramètre timeout est exprimé en secondes. Pour plus d'informations, consultez Définition de délais d'expiration pour les opérations du service BLOB.

Le tableau suivant décrit les en-têtes de demande obligatoires ou facultatifs.

 

En-tête de demande Description

Authorization

Obligatoire. Spécifie le schéma d'authentification, le nom du compte et la signature. Pour plus d'informations, consultez Authentification pour les services de stockage Azure.

Date - ou - x-ms-date

Obligatoire. Spécifie le temps universel coordonné (UTC) pour la demande. Pour plus d'informations, consultez Authentification pour les services de stockage Azure.

x-ms-version

Obligatoire pour toutes les demandes authentifiées. Spécifie la version de l'opération à utiliser pour cette demande. Pour plus d'informations, consultez Contrôle de version pour les services de stockage Azure.

Range

Range or x-ms-range is required.

Spécifie la plage d'octets à écrire en tant que page. Le début et la fin de la plage doivent être spécifiés. Cet en-tête est défini par la spécification du protocole HTTP/1.1.

Pour une opération de mise à jour de page, la taille de la plage de pages peut atteindre 4 Mo. Pour une opération d'effacement de page, la plage de pages peut atteindre la valeur de la taille totale de l'objet blob.

Étant donné que les pages doivent être alignées avec des limites de 512 octets, le décalage de début doit être un modulo de 512 et celui de fin doit être un modulo de 512 – 1. Des exemples de plages d'octets valides sont 0-511, 512-1023, etc.

Le service BLOB accepte une seule plage d'octets pour l'en-tête Range, et la plage d'octets doit être spécifiée au format suivant : bytes=startByte-endByte.

Si Range et x-ms-range sont spécifiés, le service utilise la valeur de x-ms-range. Pour plus d'informations, consultez Spécification de l'en-tête Range pour les opérations du service BLOB.

x-ms-range

Range or x-ms-range is required.

Spécifie la plage d'octets à écrire en tant que page. Le début et la fin de la plage doivent être spécifiés. Cet en-tête est défini par la spécification du protocole HTTP/1.1.

Pour une opération de mise à jour de page, la taille de la plage de pages peut atteindre 4 Mo. Pour une opération d'effacement de page, la plage de pages peut atteindre la valeur de la taille totale de l'objet blob.

Étant donné que les pages doivent être alignées avec des limites de 512 octets, le décalage de début doit être un modulo de 512 et celui de fin doit être un modulo de 512 – 1. Des exemples de plages d'octets valides sont 0-511, 512-1023, etc.

Le service BLOB accepte une seule plage d'octets pour l'en-tête x-ms-range, et la plage d'octets doit être spécifiée au format suivant : bytes=startByte-endByte.

Si Range et x-ms-range sont spécifiés, le service utilise la valeur de x-ms-range. Pour plus d'informations, consultez Spécification de l'en-tête Range pour les opérations du service BLOB.

Content-Length

Obligatoire. Indique le nombre d'octets transmis dans le corps de demande. Lorsque l'en-tête x-ms-page-write a la valeur clear, la valeur de cet en-tête doit être définie à zéro.

Content-MD5

Ce paramètre est facultatif. Un hachage MD5 du contenu de la page. Ce hachage est utilisé pour vérifier l'intégrité de la page pendant le transport. Lorsque cet en-tête est spécifié, le service de stockage compare le hachage du contenu qui est arrivé à la valeur d'en-tête qui a été envoyée. Si les deux hachages ne correspondent pas, l'opération échoue avec le code d'erreur 400 (Demande incorrecte).

L'en-tête Content-MD5 n'est pas autorisé lorsque l'en-tête x-ms-page-write a la valeur clear. Si l'en-tête est inclus dans la demande, le service BLOB retourne le code d'état 400 (Demande incorrecte).

x-ms-page-write: {update | clear}

Obligatoire. Vous pouvez spécifier l'une des options suivantes :

  • Update : écrit les octets spécifiés par le corps de la demande dans la plage spécifiée. Les en-têtes Range et Content-Length doivent correspondre pour effectuer la mise à jour.

  • Clear : efface la plage spécifiée et libère l'espace utilisé dans le stockage pour cette plage. Pour effacer une plage, définissez l'en-tête Content-Length à zéro, et l'en-tête Range à une valeur qui indique la plage à effacer, jusqu'à la taille maximale de l'objet blob.

x-ms-lease-id:<ID>

Obligatoire si l'objet blob a un bail actif. Pour effectuer cette opération sur un objet blob avec un bail actif, spécifiez l'ID de bail valide pour cet en-tête.

x-ms-if-sequence-number-le: <num>

Ce paramètre est facultatif. Si le numéro de séquence de l'objet blob est inférieur ou égal à la valeur spécifiée, la demande continue ; dans le cas contraire elle échoue avec l'erreur SequenceNumberConditionNotMet (code d'état HTTP 412 – Échec de la précondition).

x-ms-if-sequence-number-lt: <num>

Ce paramètre est facultatif. Si le numéro de séquence de l'objet blob est inférieur à la valeur spécifiée, la demande continue ; dans le cas contraire elle échoue avec l'erreur SequenceNumberConditionNotMet (code d'état HTTP 412 – Échec de la précondition).

x-ms-if-sequence-number-eq: <num>

Ce paramètre est facultatif. Si le numéro de séquence de l'objet blob est égal à la valeur spécifiée, la demande continue ; dans le cas contraire elle échoue avec l'erreur SequenceNumberConditionNotMet (code d'état HTTP 412 – Échec de la précondition).

If-Modified-Since

Ce paramètre est facultatif. Valeur DateTime. Spécifiez cet en-tête conditionnel pour écrire la page uniquement si l'objet blob été modifié depuis la date/l'heure indiquées. Si l'objet blob n'a pas été modifié, le service BLOB retourne le code d'état 412 (Échec de la précondition).

If-Unmodified-Since

Ce paramètre est facultatif. Valeur DateTime. Spécifiez cet en-tête conditionnel pour écrire la page uniquement si l'objet blob n'a pas été modifié depuis la date/l'heure indiquées. Si l'objet blob a été modifié, le service BLOB retourne le code d'état 412 (Échec de la précondition).

If-Match

Ce paramètre est facultatif. Valeur d'ETag. Spécifiez une valeur d'ETag pour cet en-tête conditionnel pour écrire la page uniquement si la valeur d'ETag de l'objet blob correspond à la valeur spécifiée. Si les valeurs ne correspondent pas, le service BLOB retourne le code d'état 412 (Échec de la précondition).

If-None-Match

Ce paramètre est facultatif. Valeur d'ETag.

Spécifiez une valeur d'ETag pour cet en-tête conditionnel pour écrire la page uniquement si la valeur d'ETag de l'objet blob ne correspond pas à la valeur spécifiée. Si les valeurs sont identiques, le service BLOB retourne le code d'état 412 (Échec de la précondition).

x-ms-client-request-id

Ce paramètre est facultatif. Fournit une valeur opaque générée par le client avec une limite de caractère de 1 Ko qui est enregistrée dans les journaux d'analyse quand la journalisation de l'analyse de stockage est activée. L'utilisation de cet en-tête est recommandée pour la corrélation des activités côté client avec les requêtes reçues par le serveur. Pour plus d'informations, consultez À propos de la journalisation Storage Analytics et Journalisation du stockage Windows Azure : utilisation des journaux pour suivre les demandes de stockage.

Cette opération prend également en charge l'utilisation d'en-têtes conditionnels pour exécuter l'opération uniquement si une condition est remplie. Pour plus d'informations, consultez Spécification des en-têtes conditionnels pour les opérations du service BLOB.

Le corps de la demande contient le contenu de la page.


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1

Request Headers:
x-ms-page-write: update
x-ms-date: Fri, 16 Sep 2011 22:15:50 GMT
x-ms-version: 2011-08-18
x-ms-range: bytes=0-65535
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=
Content-Length: 65536


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1

Request Headers:
Range: bytes=1024-2048
x-ms-page-write: clear
x-ms-date: Sun, 25 Sep 2011 23:37:35 GMT
x-ms-version: 2011-08-18
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=

La réponse inclut un code d'état HTTP et un ensemble d'en-têtes de réponse.

Une opération ayant réussi retourne le code d'état 201 (Créé).

Pour plus d'informations sur les codes d'état, consultez Codes d'état et codes d'erreur.

La réponse de l'opération inclut les en-têtes suivants. La réponse peut aussi inclure des en-têtes HTTP standard supplémentaires. Tous les en-têtes standard sont conformes à la spécification du protocole HTTP/1.1.

 

Syntaxe Description

ETag

ETag pour l'objet blob. Si la version de la demande est 18/08/2011 ou plus récente, la valeur de l'ETag sera entre guillemets. L'ETag peut être utilisé pour effectuer une opération conditionnelle Put Page en spécifiant sa valeur pour l'en-tête de demande If-Match ou If-None-Match.

Last-Modified

La date et l'heure de la dernière modification apportée à l'objet blob. Le format de date suit RFC 1123. Pour plus d'informations, consultez la rubrique Représentation des valeurs Date/Heure dans les en-têtes.

Toute opération d'écriture dans l'objet blob (notamment les mises à jour des métadonnées ou des propriétés de l'objet blob), modifie l'heure de la dernière modification de l'objet blob.

Content-MD5

Cet en-tête est retourné afin que le client puisse vérifier l'intégrité du contenu du message. La valeur de cet en-tête est calculée par le service BLOB ; elle n'est pas nécessairement identique à la valeur spécifiée dans les en-têtes de demande.

x-ms-blob-sequence-number

Le numéro de séquence actuel pour l'objet blob de pages.

x-ms-request-id

Cet en-tête identifie de façon unique la demande qui a été effectuée et peut être utilisé pour résoudre les problèmes de la demande. Pour plus d'informations, consultez Dépannage des opérations de l'API.

x-ms-version

Indique la version du service BLOB utilisée pour exécuter la demande. Cet en-tête est retourné pour les demandes effectuées avec la version du 19.09.09 ou ultérieure.

Date

Une valeur de date/heure UTC générée par le service qui indique le moment auquel la réponse a été initiée.

Response Status:
HTTP/1.1 201 Created

Response Headers:
Transfer-Encoding: chunked
Content-MD5: sQqNsWTgdUEFt6mb5y4/5Q==
Date: Sun, 25 Sep 2011 22:33:35 GMT
ETag: "0x8CB171BA9E94B0B"
Last-Modified: Sun, 25 Sep 2011 12:13:31 GMT
x-ms-version: 2011-08-18
x-ms-blob-sequence-number: 0
Content-Length: 0
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0

Cette opération peut être appelée par le propriétaire du compte ou par toute personne avec une signature d'accès partagé qui dispose des autorisations pour écrire dans cet objet blob ou son conteneur.

L'opération Put Page écrit une plage de pages dans un objet blob de pages. Cette opération peut être appelée uniquement sur un objet blob de pages existant. Elle ne peut pas être appelée pour créer un nouvel objet blob de pages ou sur un objet blob de blocs. L'appel à Put Page avec un nom d'objet blob qui n'existe pas actuellement retourne une erreur BlobNotFound (code d'état HTTP 404 – Introuvable).

Pour créer un nouvel objet blob de pages, appelez Put Blob et spécifiez le type d'objet blob à créer en tant qu'objet blob de pages. La taille d'un objet blob de pages peut atteindre 1 To.

Si l'objet blob a un bail actif, le client doit spécifier un ID de bail valide dans la demande afin d'écrire une page.

Opérations de mise à jour de page

L'appel à Put Page avec l'option Update effectue une écriture sur place sur l'objet blob de pages spécifié. Tout contenu dans la page spécifiée est remplacé par la mise à jour.

ImportantImportant
Si le serveur dépasse le délai d'expiration ou que votre connexion est fermée pendant Put Page, la page peut ne pas avoir été mise à jour. Par conséquent, réessayez la mise à jour jusqu'à ce que vous receviez une réponse indiquant la réussite.

La taille de chaque plage des pages envoyée avec Put Page pour une opération de mise à jour peut atteindre 4 Mo. La plage de début et de fin de la page doivent être alignées avec les limites de 512 octets. Si vous essayez de télécharger une plage des pages plus volumineuse que 4 Mo, le service retourne le code d'état 413 (Entité de demande trop grande).

Opérations d'effacement de page

L'appel à Put Page avec l'option Clear libère l'espace de stockage utilisé par la page spécifiée. Les pages qui ont été effacées ne sont plus suivies dans le cadre de l'objet blob de pages.

Les pages qui ont été effacées n'occasionnent plus des frais sur le compte de stockage, car leurs ressources de stockage ont été libérées. Cependant, si des instantanés existent pour l'objet blob de pages, les pages dans les instantanés occasionnent des frais si ces mêmes pages n'existent plus dans le cadre de l'objet blob source.

Gestion des problèmes d'accès concurrentiel

Le service BLOB gère les écritures simultanées dans des pages qui se chevauchent de façon séquentielle : la dernière page traitée par le service détermine le contenu de l'objet blob. Par conséquent, pour garantir l'intégrité du contenu de l'objet blob, le client doit gérer les écritures dans les pages qui se chevauchent en utilisant l'une des approches suivantes :

  • Vous pouvez vérifier la valeur de l'en-tête de réponse Last-Modified pour chaque appel réussi à Put Page. L'ordre des réponses retournées du service BLOB ne correspond pas nécessairement à l'ordre dans lequel elles ont été exécutées par le service. Mais la valeur de Last-Modified indique toujours l'ordre dans lequel le service a traité les demandes.

  • Vous pouvez effectuer des mises à jour conditionnellement en fonction de l'ETag de l'objet blob ou de l'heure de la dernière modification en utilisant l'accès concurrentiel optimiste. Cette approche fonctionne correctement si le nombre d'écritures simultanées est relativement faible. Utilisez les en-têtes de demande conditionnels If-Match, If-None-Match, If-Modified-Since et If-Unmodified-Since dans ce cas.

  • Vous pouvez appeler Lease Blob pour verrouiller l'objet blob contre d'autres écritures pour une période d'une minute ou pour une durée plus longue si le bail a été renouvelé.

  • Vous pouvez utiliser le numéro de séquence de l'objet blob pour vous assurer qu'une nouvelle tentative de la demande qui n'avait pas reçu de réponse ne produit pas des mises à jour simultanées. Cette approche est préférable pour les clients qui requièrent des débits élevés pour les écritures de page. Elle est décrite en détail dans les sections suivantes.

Utilisation du numéro de séquence d'objet blob de pages pour les demandes de nouvelle tentative

Lorsqu'un appel à Put Page dépasse le délai ou ne retourne pas de réponse, il n'est pas possible de savoir si la demande a réussi. Vous devez donc effectuer une nouvelle tentative de la demande, mais en raison de la nature distribuée des services de stockage Windows Azure, il est possible que la demande d'origine ne soit traitée que lorsque la nouvelle tentative a réussi. La demande d'origine retardée peut remplacer d'autres mises à jour et produire des résultats inattendus. La séquence suivante illustre cela :

  1. Une demande Put Page d'écriture de la valeur « X » dans la page 0 dépasse le délai et ne retourne pas de réponse.

  2. Une demande de nouvelle tentative d'écriture de la valeur « X » dans la page 0 réussit.

  3. Une demande d'écriture de la valeur « Y » dans la page 0 réussit.

  4. La demande d'origine réussit, et écrit la valeur « X » dans la page 0.

  5. La lecture de la page 0 retourne la valeur « X », alors que le client s'attendait à la valeur « Y ».

Ce type de conflit peut se produire lorsque la demande d'origine ne retourne pas de code d'état entre 100-499, ou 503 (Serveur occupé). Si l'un de ces codes d'état est retourné, vous pouvez savoir si la demande a réussi ou a échoué. Mais si le service retourne un code d'état en dehors de cette plage, il n'existe aucun moyen de savoir l'état de la demande d'origine.

Pour éviter ce type de conflit, vous pouvez utiliser le numéro de séquence de l'objet blob de pages pour garantir que lorsque vous réessayez une demande, la demande d'origine ne réussira pas ultérieurement. Pour cela, vous devez incrémenter le numéro de séquence avant de retenter la demande d'origine. Vous pouvez ensuite utiliser des en-têtes de numéro de séquence conditionnels pour garantir que la demande échoue si son numéro de séquence ne correspond pas au numéro de séquence attendu. La séquence suivante illustre cette approche :

  1. Le client crée un objet blob de pages avec Put Blob et définit son numéro de séquence à 0.

  2. Une demande Put Page d'écriture de la valeur « X » dans la page 0 avec l'en-tête if-sequence-number-lt défini à 1 dépasse le délai d'expiration et ne retourne pas de réponse.

  3. Le client appelle Set Blob Properties pour mettre à jour le numéro de séquence à 1.

  4. Une demande de nouvelle tentative d'écriture de la valeur « X » dans la page 0 avec if-sequence-number-lt défini à 2 réussit.

  5. Une demande de nouvelle tentative d'écriture de la valeur « Y » dans la page 0 avec if-sequence-number-lt défini à 2 réussit.

  6. La demande d'origine est traitée, mais elle échoue car elle spécifie une condition qui indique que le numéro de séquence doit être inférieur à 1 (autrement dit, l'en-tête if-sequence-num-lt est défini à 1). L'erreur est SequenceNumberConditionNotMet (code d'état HTTP 412 – Échec de la précondition).

  7. La lecture de la page 0 retourne la valeur attendue « Y ».

Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.
Afficher:
© 2014 Microsoft