VENTES: 1-800-867-1389

Spécification des en-têtes conditionnels pour les opérations du service BLOB

Mis à jour: février 2014

Plusieurs opérations de service BLOB prennent en charge l'utilisation des en-têtes conditionnels. Vous pouvez spécifier des en-têtes conditionnels pour effectuer une opération uniquement si une condition spécifiée a été remplie.

Le service BLOB suit la Spécification de protocole HTTP/1.1 pour les en-têtes conditionnels.

Les en-têtes conditionnels pris en charge sont décrits dans le tableau suivant.

 

En-tête conditionnel Description

If-Modified-Since

Valeur DateTime. Spécifiez cet en-tête pour exécuter l'opération uniquement si la ressource a été modifiée depuis le temps indiqué.

If-Unmodified-Since

Valeur DateTime. Spécifiez cet en-tête pour exécuter l'opération uniquement si la ressource n'a pas été modifiée depuis la date/l'heure indiquées.

If-Match

Valeur d'ETag. Spécifiez cet en-tête pour exécuter l'opération uniquement si l'ETag de la ressource correspond à la valeur spécifiée. Pour les versions du 18/08/2011 et ultérieures, l'ETag peut être spécifié entre guillemets.

If-None-Match

Une valeur d'ETag ou le caractère générique (*). Spécifiez cet en-tête pour exécuter l'opération uniquement si l'ETag de la ressource ne correspond pas à la valeur spécifiée. Pour les versions du 18/08/2011 et ultérieures, l'ETag peut être spécifié entre guillemets.

Spécifiez le caractère générique (*) pour exécuter l'opération uniquement si la ressource n'existe pas, et faire échouer l'opération si elle existe.

À partir de la version du 15/08/2013, les opérations Get Blob (API REST) et Get Blob Properties (API REST) prennent en charge plusieurs en-têtes conditionnels. Spécifiez n'importe quelle combinaison d'en-têtes conditionnels pris en charge. Le service BLOB évalue ces conditions d'après l'expression suivante :

If-Match && If-Unmodified-Since && (If-None-Match || If-Modified-Since)

Vous pouvez également fournir plusieurs valeurs séparées par des virgules pour If-Match et If-None-Match. Si vous spécifiez plusieurs valeurs pour If-Match, le service BLOB exécute une opération OR logique sur toutes les valeurs fournies avant d'évaluer l'expression entière. Si vous spécifiez plusieurs valeurs pour if-None-Match, le service exécute une opération AND logique avant d'évaluer l'expression entière. La spécification de plusieurs valeurs pour If-Modified-Since et If-Unmodified-Since n'est pas prise en charge et génère le code d'erreur 400 (Bad Request).

Cette fonctionnalité est activée conformément à la spécification HTTP/1.1 et pour satisfaire les scénarios où un réseau de distribution de contenu (CDN) ou un serveur proxy ajoute des en-têtes conditionnels à une demande en cours. Voici quelques exemples des différentes combinaisons d'en-têtes conditionnels.

Exemple 1 :

Examinez une demande Get Blob (API REST) contenant les en-têtes If-Match et If-Modified-Since. Le tableau suivant indique le résultat si les en-têtes sont évalués individuellement, et le résultat s'ils sont évalués combinés.

 

En-têtes conditionnels Résultat en cas d'évaluation individuelle Résultat en cas d'évaluation combinée

If-Match

412 (Échec de la précondition)

412 (Échec de la précondition)

If-Modified-Since

200 (OK)

If-Match

412 (Échec de la précondition)

412 (Échec de la précondition)

If-Modified-Since

304 (Non modifié)

If-Match

200 (OK)

200 (OK)

If-Modified-Since

200 (OK)

If-Match

200 (OK)

304 (Non modifié)

If-Modified-Since

304 (Non modifié)

Exemple 2 :

Examinez une demande contenant les en-têtes If-None-Match et If-Modified-Since.

 

En-têtes conditionnels Résultat en cas d'évaluation individuelle Résultat en cas d'évaluation combinée

If-None-Match

304 (Non modifié)

200 (OK)

If-Modified-Since

200 (OK)

If-None-Match

200 (OK)

200 (OK)

If-Modified-Since

200 (OK)

If-None-Match

200 (OK)

200 (OK)

If-Modified-Since

304 (Non modifié)

If-None-Match

304 (Non modifié)

304 (Non modifié)

If-Modified-Since

304 (Non modifié)

Exemple 3 :

Examinez une demande contenant les en-têtes If-Modified-Since, If-Match et If-Unmodified-Since.

 

En-têtes conditionnels Résultat en cas d'évaluation individuelle Résultat en cas d'évaluation combinée

If-Modified-Since

200 (OK)

412 (Échec de la précondition)

If-Match

412 (Échec de la précondition)

If-Unmodified-Since

200 (OK)

If-Modified-Since

200 (OK)

412 (Échec de la précondition)

If-Match

200 (OK)

If-Unmodified-Since

412 (Échec de la précondition)

If-Modified-Since

304 (Non modifié)

412 (Échec de la précondition)

If-Match

200 (OK)

If-Unmodified-Since

412 (Échec de la précondition)

If-Modified-Since

304 (Non modifié)

304 (Non modifié)

If-Match

200 (OK)

If-Unmodified-Since

200 (OK)

Exemple 4 :

Examinez une demande contenant les en-têtes If-Modified-Since, If-None-Match, If-Unmodified-Since et If-Match.

 

Combinaison Code d'état HTTP individuel Résultat d'état Get Blob

If-Modified-Since

200 (OK)

200 (OK)

If-None-Match

200 (OK)

If-Unmodified-Since

200 (OK)

If-Match

200 (OK)

If-Modified-Since

200 (OK)

412 (Échec de la précondition)

If-None-Match

304 (Non modifié)

If-Unmodified-Since

412 (Échec de la précondition)

If-Match

200 (OK)

If-Modified-Since

200 (OK)

200 (OK)

If-None-Match

304 (Non modifié)

If-Unmodified-Since

200 (OK)

If-Match

200 (OK)

If-Modified-Since

304 (Non modifié)

412 (Échec de la précondition)

If-None-Match

200 (OK)

If-Unmodified-Since

200 (OK)

If-Match

412 (Échec de la précondition)

If-Modified-Since

304 (Non modifié)

412 (Échec de la précondition)

If-None-Match

200 (OK)

If-Unmodified-Since

412 (Échec de la précondition)

If-Match

412 (Échec de la précondition)

If-Modified-Since

304 (Non modifié)

200 (OK)

If-None-Match

200 (OK)

If-Unmodified-Since

200 (OK)

If-Match

200 (OK)

If-Modified-Since

304 (Non modifié)

412 (Échec de la précondition)

If-None-Match

304 (Non modifié)

If-Unmodified-Since

412 (Échec de la précondition)

If-Match

200 (OK)

Lorsque vous appelez des opérations de lecture du service BLOB (Get Blob (API REST) et Get Blob Properties (API REST)) avec des versions antérieures à la version du 15/08/2013, et lorsque vous appelez une opération d'écriture indépendamment de la version, gardez les points suivants à l'esprit :

  • Si une demande spécifie les en-têtes If-None-Match et If-Modified-Since, la demande est évaluée en fonction des critères spécifiés dans If-None-Match.

  • Si une demande spécifie les en-têtes If-Match et If-Unmodified-Since, la demande est évaluée en fonction des critères spécifiés dans If-Match.

  • À l'exception des deux combinaisons d'en-têtes conditionnels répertoriées ci-dessus, une demande peut spécifier uniquement un en-tête conditionnel. La spécification de plusieurs en-têtes conditionnels entraîne un code d'état 400 (Bad Request).

  • Si une réponse comprend un ETag, vérifiez la version de la demande et la réponse avant de traiter l'ETag. Par exemple, la version du 18/08/2011 et les versions ultérieures retournent un ETag entre guillemets, mais les versions antérieures ne le font pas. Vérifiez que votre application peut traiter les deux formats d'ETag avant qu'ils soient évalués.

  • RFC 2616 autorise plusieurs valeurs d'ETag dans un seul en-tête, mais les demandes auprès du service BLOB ne peuvent inclure qu'une valeur d'ETag. La spécification de plusieurs valeurs d'ETag entraîne un code d'état 400 (Bad Request).

Les opérations qui prennent en charge les en-têtes conditionnels sont décrites dans le tableau suivant.

 

Opération REST

Type d'opération

En-têtes conditionnels pris en charge

Copy Blob (API REST)

Lire et écrire

Pour les conditions sur l'objet blob de destination :

  • If-Modified-Since 

  • If-Unmodified-Since 

  • If-Match 

  • If-None-Match 

Pour les conditions sur l'objet blob source :

  • x-ms-source-if-modified-since 

  • x-ms-source-if-unmodified-since 

  • x-ms-source-if-match 

  • x-ms-source-if-none-match 

Delete Blob (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Delete Container (API REST)

Write

If-Modified-Since

If-Unmodified-Since

Get Blob (API REST)

Lire

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Get Blob Metadata (API REST)

Lire

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Get Blob Properties (API REST)

Lire

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Get Page Ranges (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Lease Blob (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Lease Container (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Put Blob (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Put Block List (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Put Page (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Set Blob Metadata (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Set Blob Properties (API REST)

Write

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Set Container ACL (API REST)

Write

If-Modified-Since

If-Unmodified-Since

Set Container Metadata (API REST)

Write

If-Modified-Since

Snapshot Blob (API REST)

Lire

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Les opérations de données du service BLOB suivantes ne prennent actuellement pas en charge les en-têtes conditionnels :

Si la demande comprend un en-tête conditionnel et que la condition spécifiée n'est pas remplie par la ressource qui est demandée, le service BLOB retourne un code de réponse HTTP. Les codes de réponse retournés sont conformes à la spécification du protocole HTTP/1.1 (RFC 2616). Les méthodes dans les bibliothèques .NET Windows Azure convertissent ces codes de réponse d'erreur en StorageClientException, et remplissent la propriété StatusCode avec une valeur de l'énumération System.Net.HttpStatusCode. Pour consulter l'exemple de code qui gère une exception provoquée par une opération conditionnelle, consultez Actualiser une copie locale d'objet BLOB avec une condition.

Le tableau suivant indique les codes de réponse retournés pour une condition non remplie pour chaque en-tête conditionnel lorsque l'opération est une opération de lecture. Les opérations de lecture utilisent les verbes GET ou HEAD.

 

En-tête conditionnel Le code de réponse si la condition n'a pas été remplie

If-Modified-Since

Non modifié (304 (Not Modified))

If-Unmodified-Since

Échec de la précondition (412 (Precondition Failed))

If-Match

Échec de la précondition (412 (Precondition Failed))

If-None-Match

Non modifié (304 (Not Modified))

Reportez-vous aux exemples ci-dessus pour obtenir les résultats en utilisant plusieurs en-têtes avec la version du 15/08/2013 ou les versions ultérieures.

Le tableau suivant indique les codes de réponse retournés pour une condition non remplie pour chaque en-tête conditionnel lorsque l'opération est une opération d'écriture. Les opérations d'écriture utilisent les verbes PUT ou DELETE.

 

En-tête conditionnel Le code de réponse si la condition n'a pas été remplie

If-Modified-Since

Échec de la précondition (412 (Precondition Failed))

If-Unmodified-Since

Échec de la précondition (412 (Precondition Failed))

If-Match

Échec de la précondition (412 (Precondition Failed))

If-None-Match

Échec de la précondition (412 (Precondition Failed))

Le tableau suivant indique les codes de réponse retournés pour une condition non remplie pour chaque en-tête conditionnel lorsque l'opération est une opération de copie. L'opération Copy Blob (API REST) utilise les verbes PUT.

 

En-tête conditionnel Le code de réponse si la condition n'a pas été remplie

If-Modified-Since

Échec de la précondition (412 (Precondition Failed))

If-Unmodified-Since

Échec de la précondition (412 (Precondition Failed))

If-Match

Échec de la précondition (412 (Precondition Failed))

If-None-Match

Échec de la précondition (412 (Precondition Failed))

x-ms-source-if-modified-since

Échec de la précondition (412 (Precondition Failed))

x-ms-source-if-unmodified-since

Échec de la précondition (412 (Precondition Failed))

x-ms-source-if-match

Échec de la précondition (412 (Precondition Failed))

x-ms-source-if-none-match

Échec de la précondition (412 (Precondition Failed))

Voir aussi

Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft