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
eIf-Modified-Since
, la solicitud se evalúa según los criterios especificados enIf-None-Match
.Si una solicitud especifica los encabezados
If-Match
eIf-Unmodified-Since
, la solicitud se evalúa según los criterios especificados enIf-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).