Especificación de encabezados condicionales para las operaciones de Blob Service

Son varias las operaciones del servicio Blob que admiten el uso de encabezados condicionales. Puede especificar encabezados condicionales para realizar una operación solo si se cumple una condición especificada.

Blob service sigue la especificación del protocolo HTTP/1.1 para los encabezados condicionales.

Encabezados condicionales admitidos

Los encabezados condicionales admitidos se describen en la tabla siguiente.

Encabezado condicional Descripción
If-Modified-Since Valor DateTime. El formato de la fecha sigue las convenciones de RFC 1123. Para obtener más información, vea Representación de valores de fecha y hora en encabezados. Especifique este encabezado para realizar la operación solo si se ha modificado el recurso desde la hora especificada.
If-Unmodified-Since Valor DateTime. El formato de la fecha sigue las convenciones de RFC 1123. Para obtener más información, vea Representación de valores de fecha y hora en encabezados. Especifique este encabezado para realizar la operación solo si no se ha modificado el recurso desde la fecha u hora especificada.
If-Match Valor ETag. Especifique este encabezado para realizar la operación solo si la ETag del recurso coincide con el valor especificado. Para las versiones 2011-08-18 y más recientes, la ETag puede especificarse entre comillas.
If-None-Match Valor ETag o el carácter comodín (*). Especifique este encabezado para realizar la operación solo si la ETag del recurso no coincide con el valor especificado. Para las versiones 2011-08-18 y más recientes, la ETag puede especificarse entre comillas.

Especifique el carácter comodín (*) para realizar la operación solo si el recurso no existe y para que se produzca un error en la operación si existe.

Especificar encabezados condicionales para las operaciones de lectura del servicio Blob en la versión 2013-08-15 o posterior

A partir de la versión 2013-08-15, las operaciones Get Blob y Get Blob Properties admiten varios encabezados condicionales. Puede especificar cualquier combinación de encabezados condicionales admitidos. Blob service evaluará estas condiciones de acuerdo con la siguiente expresión:

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

También puede proporcionar varios valores separados por comas para If-Match e If-None-Match. Si especifica varios valores para If-Match, Blob service realiza una operación lógica OR en todos los valores suministrados antes de evaluar toda la expresión. Si especifica varios valores para if-None-Match, el servicio realiza una operación lógica AND antes de evaluar toda la expresión. No se admite especificar varios valores para If-Modified-Since e If-Unmodified-Since y produce el código de error 400 (Bad Request).

Esta característica está habilitada para cumplir con la especificación HTTP/1.1 y para satisfacer escenarios en los que una red de entrega de contenido (CDN) o un servidor proxy agrega encabezados condicionales adicionales a una solicitud en proceso de ejecución. A continuación se muestran algunos ejemplos de diferentes combinaciones de encabezados condicionales.

Ejemplo 1:

Considere una solicitud Get Blob que contiene los If-Match encabezados y If-Modified-Since . En la tabla siguiente se indica el resultado si los encabezados se evalúan individualmente y si se evalúan juntos.

Encabezados condicionales Resultado si se evalúan individualmente Resultado si se evalúan juntos
If-Match 412 (Error de condición previa) 412 (Error de condición previa)
If-Modified-Since 200 (OK) 412 (Error de condición previa)
If-Match 412 (Error de condición previa) 412 (Error de condición previa)
If-Modified-Since 304 (No modificado) 412 (Error de condición previa)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 304 (No modificado)
If-Modified-Since 304 (No modificado) 304 (No modificado)

Ejemplo 2:

Considere una solicitud que contiene los encabezados If-None-Match e If-Modified-Since.

Encabezados condicionales Resultado si se evalúan individualmente Resultado si se evalúan juntos
If-None-Match 304 (No modificado) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (No modificado) 200 (OK)
If-None-Match 304 (No modificado) 304 (No modificado)
If-Modified-Since 304 (No modificado) 304 (No modificado)

Ejemplo 3:

Considere una solicitud que contiene los encabezados If-Modified-Since, If-Match e If-Unmodified-Since.

Encabezados condicionales Resultado si se evalúan individualmente Resultado si se evalúan juntos
If-Modified-Since 200 (OK) 412 (Error de condición previa)
If-Match 412 (Error de condición previa) 412 (Error de condición previa)
If-Unmodified-Since 200 (OK) 412 (Error de condición previa)
If-Modified-Since 200 (OK) 412 (Error de condición previa)
If-Match 200 (OK) 412 (Error de condición previa)
If-Unmodified-Since 412 (Error de condición previa) 412 (Error de condición previa)
If-Modified-Since 304 (No modificado) 412 (Error de condición previa)
If-Match 200 (OK) 412 (Error de condición previa)
If-Unmodified-Since 412 (Error de condición previa) 412 (Error de condición previa)
If-Modified-Since 304 (No modificado) 304 (No modificado)
If-Match 200 (OK) 304 (No modificado)
If-Unmodified-Since 200 (OK) 304 (No modificado)

Ejemplo 4:

Considere una solicitud que contiene los encabezados If-Modified-Since, If-None-Match, If-Unmodified-Since e If-Match.

Combinación Código de estado HTTP individual Resultado de estado de Get Blob
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 412 (Error de condición previa)
If-None-Match 304 (No modificado) 412 (Error de condición previa)
If-Unmodified-Since 412 (Error de condición previa) 412 (Error de condición previa)
If-Match 200 (OK) 412 (Error de condición previa)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 304 (No modificado) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (No modificado) 412 (Error de condición previa)
If-None-Match 200 (OK) 412 (Error de condición previa)
If-Unmodified-Since 200 (OK) 412 (Error de condición previa)
If-Match 412 (Error de condición previa) 412 (Error de condición previa)
If-Modified-Since 304 (No modificado) 412 (Error de condición previa)
If-None-Match 200 (OK) 412 (Error de condición previa)
If-Unmodified-Since 412 (Error de condición previa) 412 (Error de condición previa)
If-Match 412 (Error de condición previa) 412 (Error de condición previa)
If-Modified-Since 304 (No modificado) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (No modificado) 412 (Error de condición previa)
If-None-Match 304 (No modificado) 412 (Error de condición previa)
If-Unmodified-Since 412 (Error de condición previa) 412 (Error de condición previa)
If-Match 200 (OK) 412 (Error de condición previa)

Especificar encabezados condicionales para las operaciones de lectura en versiones anteriores a 2013-08-15 y para las operaciones de escritura (todas las versiones)

Al llamar a las operaciones de lectura de Blob Service (Get Blob y Get BlobProperties) con versiones anteriores a 2013-08-15 y al llamar a cualquier operación de escritura independientemente de la versión, tenga en cuenta lo siguiente:

  • Si una solicitud especifica los encabezados If-None-Match e If-Modified-Since, la solicitud se evalúa según los criterios especificados en If-None-Match.

  • Si una solicitud especifica los encabezados If-Match e If-Unmodified-Since, la solicitud se evalúa según los criterios especificados en If-Match.

  • Con la excepción de las dos combinaciones de encabezados condicionales enumeradas anteriormente, una solicitud solo puede especificar un único encabezado condicional. Si se especifica más de un encabezado condicional, se genera el código de estado 400 (Bad Request).

  • Si una respuesta incluye una ETag, compruebe la versión de la solicitud y la respuesta antes de procesar la ETag. Por ejemplo, la versión 2011-08-18 y posteriores devuelven una ETag entre comillas, pero las versiones anteriores no. Asegúrese de que la aplicación pueda procesar ambos formatos de ETag antes de evaluarlos.

  • RFC 2616 permite varios valores de ETag en un solo encabezado, pero las solicitudes a Blob service solo pueden incluir un valor ETag. Si se especifica más de un valor ETag, se genera el código de estado 400 (Bad Request).

Operaciones compatibles con los encabezados condicionales

Las operaciones que admiten encabezados condicionales se describen en la tabla siguiente.

Operación REST Tipo de operación Encabezados condicionales admitidos
Append Block

(versión 2015-02-21 y posteriores)
Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Append Block From URL

(versión 2018-11-09 y posteriores)
Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Copy Blob Lectura y escritura Para las condiciones en el blob de destino:

- If-Modified-Since

- If-Unmodified-Since

- If-Match

- If-None-Match

- x-ms-if-tags

Para las condiciones en el blob de origen:

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

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

- x-ms-source-if-match

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

- x-ms-source-if-tags
Delete Blob Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Delete Container Escritura If-Modified-Since

If-Unmodified-Since
Get Blob Leer If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Get Blob Metadata Leer If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Get Blob Properties Leer If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Obtener etiquetas de blobs

(versión 2019-12-12 y posteriores)
Leer x-ms-if-tags
Get Block List Leer x-ms-if-tags
Get Page Ranges (Conseguir intervalos de páginas) Leer If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Concesión de blobs Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Lease Container Escritura If-Modified-Since

If-Unmodified-Since
Put Blob From URL Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Para las condiciones en el blob de origen:

- x-ms-source-If-Modified-Since

- x-ms-source-if-Unmodified-Since

- x-ms-source-If-Match

- x-ms-source-If-None-Match

Put Blob Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Block From URL

(versión 2018-03-28 y posteriores)
Escritura x-ms-source-If-Modified-Since

x-ms-source-If-Unmodified-Since

x-ms-source-If-Match

x-ms-source-If-None-Match
Put Block List Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Page Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Page From URL

(versión 2018-11-09 y posteriores)
Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Set Blob Metadata Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Set Blob Properties Escritura If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Establecer lista de control de acceso de contenedor Escritura If-Modified-Since

If-Unmodified-Since
Establecimiento de metadatos de contenedor Escritura If-Modified-Since
Establecer etiquetas de blobs

(versión 2019-12-12 y posteriores)
Escritura x-ms-if-tags
Set Blob Tier Escritura x-ms-if-tags
Snapshot Blob Leer If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Establecimiento de la directiva de inmutabilidad de blobs Escritura If-Unmodified-Since

Las operaciones de datos de Blob service siguientes no admiten actualmente encabezados condicionales:

Códigos de respuesta HTTP para las operaciones compatibles con los encabezados condicionales

Si la solicitud incluye un encabezado condicional y el recurso solicitado no cumple la condición especificada, el servicio Blob devuelve un código de respuesta HTTP. Los códigos de respuesta devueltos están de acuerdo con la especificación del protocolo HTTP/1.1 (RFC 2616).

Los métodos de la biblioteca cliente de Azure .NET convierten estos códigos de respuesta de error en un objeto StorageException.

Operaciones de lectura

La tabla siguiente indica los códigos de respuesta devueltos para una condición que no se ha cumplido para cada encabezado condicional si la operación es una operación de lectura. Las operaciones de lectura utilizan los verbos GET o HEAD.

Encabezado condicional Código de respuesta si la condición no se ha cumplido
If-Modified-Since No modificado (304 (No modificado))
If-Unmodified-Since Error de condición previa (412 (Error de condición previa))
If-Match Error de condición previa (412 (Error de condición previa))
If-None-Match No modificado (304 (No modificado))

Vea los ejemplos anteriores para conocer los resultados cuando se utilizan varios encabezados con las versiones 2013-08-15 o posteriores.

Operaciones de escritura

La tabla siguiente indica los códigos de respuesta devueltos para una condición que no se ha cumplido para cada encabezado condicional si la operación es una operación de escritura. Las operaciones de escritura utilizan los verbos PUT o DELETE.

Encabezado condicional Código de respuesta si la condición no se ha cumplido
If-Modified-Since Error de condición previa (412 (Error de condición previa))
If-Unmodified-Since Error de condición previa (412 (Error de condición previa))
If-Match Error de condición previa (412 (Error de condición previa))
If-None-Match Error de condición previa (412 (Error de condición previa))

Operaciones de copia

La tabla siguiente indica los códigos de respuesta devueltos para una condición que no se ha cumplido para cada encabezado condicional si la operación es una operación de copia. La operación Copiar blob usa los verbos PUT.

Encabezado condicional Código de respuesta si la condición no se ha cumplido
If-Modified-Since Error de condición previa (412 (Error de condición previa))
If-Unmodified-Since Error de condición previa (412 (Error de condición previa))
If-Match Error de condición previa (412 (Error de condición previa))
If-None-Match Error de condición previa (412 (Error de condición previa))
x-ms-source-if-modified-since Error de condición previa (412 (Error de condición previa))
x-ms-source-if-unmodified-since Error de condición previa (412 (Error de condición previa))
x-ms-source-if-match Error de condición previa (412 (Error de condición previa))
x-ms-source-if-none-match Error de condición previa (412 (Error de condición previa))

Operaciones condicionales de etiquetas

Además de los encabezados condicionales HTTP estándar admitidos por Blob service, varias operaciones también admiten condiciones en las etiquetas de un recurso de blob.

Encabezado condicional Descripción
x-ms-if-tags Versión 2019-12-12 y versiones posteriores. Valor TagsPredicate. Especifique este encabezado para realizar la operación solo si el predicado se evalúa como con respecto a true las etiquetas del blob.
x-ms-source-if-tags Versión 2019-12-12 y versiones posteriores. Solo se aplica a Copy Blob. Valor TagsPredicate. Especifique este encabezado para realizar la operación solo si el predicado se evalúa como con respecto a true las etiquetas del blob de origen.

Si el x-ms-if-tags encabezado condicional o x-ms-source-if-tags está presente en una solicitud y TagsPredicate se evalúa como false, Blob service devolverá el código de error 412 (error de condición previa) para la operación.

El autor de la llamada debe tener permiso para leer las etiquetas de un blob para usar los x-ms-if-tags encabezados condicionales o x-ms-source-if-tags .

Sintaxis de predicado de etiquetas

Blob service admite un subconjunto de la gramática de la cláusula WHERE de ANSI SQL para el valor del TagsPredicate encabezado. Se admiten los siguientes operadores:

Operador Descripción Ejemplo
= Igual Status = 'In Progress'
<> No igual a Status <> 'Done'
> Mayor que LastModified > '2018-06-18 20:51:26Z'
>= Mayor o igual que Priority >= '05'
< Menor que Age < '032'
<= Menor o igual que Reviewer <= 'Smith'
AND Y lógico Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR OR lógico Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

Todos los valores de etiqueta son cadenas y los operadores relacionales binarios admitidos usan una ordenación lexicográfica de los valores de etiqueta. Para admitir tipos de datos que no son de cadena, incluidos números y fechas, se debe emplear el relleno adecuado y el formato ordenable. Los valores de etiqueta deben ir entre comillas simples.

Si los nombres de etiqueta son identificadores SQL normales, pueden estar presentes sin escape; Si contienen caracteres especiales, deben delimitarse con comillas dobles (por ejemplo, "TagName" = 'TagValue').

Las expresiones pueden incluir comparaciones para varios nombres y valores de etiqueta. Paréntesis (( y )) se pueden usar para agrupar expresiones lógicas y controlar el orden canónico de la operación. Puede TagsPredicate incluir como máximo diez (10) operaciones lógicas.

El servicio de almacenamiento rechazará cualquier solicitud que contenga una expresión no válida con el código de error 400 (solicitud incorrecta).

Consulte también

Conceptos de Blob Service