Partilhar via


Especificação de cabeçalhos condicionais para operações de serviço Blob

Várias operações de serviço Blob suportam a utilização de cabeçalhos condicionais. Pode especificar cabeçalhos condicionais para realizar uma operação apenas quando uma condição especificada for cumprida.

O serviço Blob segue a especificação do protocolo HTTP/1.1 para cabeçalhos condicionais.

Cabeçalhos Condicionais Suportados

Os cabeçalhos condicionais suportados são descritos na tabela seguinte.

Cabeçalho condicional Description
If-Modified-Since Um valor de DateTime. O formato de data segue o RFC 1123. Para mais informações, veja Representação dos valores de data-hora em cabeçalhos. Especifique este cabeçalho para realizar a operação apenas se o recurso tiver sido modificado desde o tempo especificado.
If-Unmodified-Since Um valor de DateTime. O formato de data segue o RFC 1123. Para mais informações, veja Representação dos valores de data-hora em cabeçalhos. Especifique este cabeçalho para realizar a operação apenas se o recurso não tiver sido modificado antes da data/hora especificada.
If-Match Um valor ETag. Especifique esse cabeçalho para executar a operação somente se a ETag do recurso corresponder ao valor especificado. Para as versões de 2011-08-18 e posteriores, o ETag pode ser especificado entre aspas.
If-None-Match Um valor ETag ou o caractere curinga (*). Especifique este cabeçalho para realizar a operação apenas se o ETag do recurso não corresponder ao valor especificado. Para as versões de 2011-08-18 e posteriores, o ETag pode ser especificado entre aspas.

Especifique o carácter coringa (*) para realizar a operação apenas se o recurso não existir, e falhar a operação se existir.

Especificação de cabeçalhos condicionais para operações de leitura de serviço blob na versão 2013-08-15 ou posterior

A partir da versão 2013-08-15, as operações Get Blob e Get Blob Properties suportam múltiplos cabeçalhos condicionais. Pode especificar qualquer combinação de cabeçalhos condicionais suportados. O serviço Blob avalia estas condições de acordo com a seguinte expressão:

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

Também pode fornecer múltiplos valores separados por vírgulas para If-Match e If-None-Match. Se especificar múltiplos valores para If-Match, então o serviço Blob realiza uma operação lógica OR em todos os valores fornecidos antes de avaliar toda a expressão. Se especificar múltiplos valores para if-None-Match, então o serviço realiza uma operação lógica AND antes de avaliar toda a expressão. Especificar múltiplos valores para If-Modified-Since e If-Unmodified-Since não é suportado resulta no código de erro 400 (Bad Request).

Esta funcionalidade está ativada para cumprir a especificação HTTP/1.1. Também se adapta a cenários em que uma Rede de Entrega de Conteúdos (CDN) ou um servidor proxy adiciona cabeçalhos condicionais adicionais a um pedido em voo. Os exemplos seguintes ilustram várias combinações diferentes de cabeçalhos condicionais.

Exemplo 1:

Considere um pedido Get Blob contendo os If-Match cabeçalhos e.If-Modified-Since A tabela seguinte indica o resultado se os cabeçalhos forem avaliados individualmente, e o resultado se forem avaliados em conjunto.

Cabeçalhos condicionais Resultado se avaliado individualmente Resultado se avaliado em combinação
If-Match 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Modified-Since 200 (OK) 412 (Pré-condição Falhada)
If-Match 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Modified-Since 304 (Não Modificado) 412 (Pré-condição Falhada)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 304 (Não Modificado)
If-Modified-Since 304 (Não Modificado) 304 (Não Modificado)

Exemplo 2:

Considere um pedido contendo If-None-Match e If-Modified-Since cabeçalhos.

Cabeçalhos condicionais Resultado se avaliado individualmente Resultado se avaliado em combinação
If-None-Match 304 (Não 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 (Não Modificado) 200 (OK)
If-None-Match 304 (Não Modificado) 304 (Não Modificado)
If-Modified-Since 304 (Não Modificado) 304 (Não Modificado)

Exemplo 3:

Considere um pedido contendo If-Modified-Since, If-Match, e If-Unmodified-Since cabeçalhos.

Cabeçalhos condicionais Resultado se avaliado individualmente Resultado se avaliado em combinação
If-Modified-Since 200 (OK) 412 (Pré-condição Falhada)
If-Match 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Unmodified-Since 200 (OK) 412 (Pré-condição Falhada)
If-Modified-Since 200 (OK) 412 (Pré-condição Falhada)
If-Match 200 (OK) 412 (Pré-condição Falhada)
If-Unmodified-Since 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Modified-Since 304 (Não Modificado) 412 (Pré-condição Falhada)
If-Match 200 (OK) 412 (Pré-condição Falhada)
If-Unmodified-Since 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Modified-Since 304 (Não Modificado) 304 (Não Modificado)
If-Match 200 (OK) 304 (Não Modificado)
If-Unmodified-Since 200 (OK) 304 (Não Modificado)

Exemplo 4:

Considere um pedido contendo If-Modified-Since, If-None-Match, If-Unmodified-Since, e If-Match cabeçalhos.

Combinação Código de estado http individual Obter o resultado do estado 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 (Pré-condição Falhada)
If-None-Match 304 (Não Modificado) 412 (Pré-condição Falhada)
If-Unmodified-Since 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Match 200 (OK) 412 (Pré-condição Falhada)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 304 (Não Modificado) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (Não Modificado) 412 (Pré-condição Falhada)
If-None-Match 200 (OK) 412 (Pré-condição Falhada)
If-Unmodified-Since 200 (OK) 412 (Pré-condição Falhada)
If-Match 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Modified-Since 304 (Não Modificado) 412 (Pré-condição Falhada)
If-None-Match 200 (OK) 412 (Pré-condição Falhada)
If-Unmodified-Since 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Match 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Modified-Since 304 (Não 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 (Não Modificado) 412 (Pré-condição Falhada)
If-None-Match 304 (Não Modificado) 412 (Pré-condição Falhada)
If-Unmodified-Since 412 (Pré-condição Falhada) 412 (Pré-condição Falhada)
If-Match 200 (OK) 412 (Pré-condição Falhada)

Especificar cabeçalhos condicionais para operações de leitura em versões anteriores a 2013-08-15, e para operações de escrita (todas as versões)

Ao chamar operações de leitura do serviço Blob (Get Blob e Get Blob Properties) com versões anteriores a 2013-08-15, e ao chamar qualquer operação de escrita independentemente da versão, tenha em mente as seguintes considerações:

  • Se um pedido especificar ambos os If-None-Match cabeçalhos e If-Modified-Since , o pedido é avaliado com base nos critérios especificados em If-None-Match.

  • Se um pedido especificar ambos os If-Match cabeçalhos e If-Unmodified-Since , o pedido é avaliado com base nos critérios especificados em If-Match.

  • Exceto pelas duas combinações de cabeçalhos condicionais listadas anteriormente, um pedido pode especificar apenas um único cabeçalho condicional. Especificar mais do que um cabeçalho condicional resulta no código de estado 400 (Bad Request).

  • Se uma resposta incluir um ETag, verifique a versão do pedido e da resposta antes de processar o ETag. Por exemplo, a versão 2011-08-18 e posteriores devolvem um ETag cotado, mas versões mais antigas não. Garante que a tua candidatura pode processar ambos os formatos ETag antes de serem avaliados.

  • O RFC 2616 permite múltiplos valores ETag num único cabeçalho, mas os pedidos ao serviço Blob só podem incluir um valor ETag. Especificar mais do que um valor ETag resulta no código de estado 400 (Bad Request).

Operações que suportam cabeçalhos condicionais

As operações que suportam cabeçalhos condicionais são descritas na tabela seguinte.

Operação REST Tipo de operação Cabeçalhos condicionais suportados
Bloco Acrescentar

(versão 2015-02-21 e posteriores)
Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Adicionar Bloco a partir da URL

(versão 2018-11-09 e posteriores)
Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Copiar Blob Ler e escrever Para as condições no blob de destino:

- Se-Modificado-Já

- Se-Não-Modificado-Desde

- If-Match

- Se-Nenhum-Jogo

- x-ms-if-tags

Para condições no blob de origem:

- 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
Eliminar Blob Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Excluir contêiner Escreve Se-Modificado-Já

Se-Não-Modificado-Desde
Apanha o Blob Leitura Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Obter metadados de Blob Leitura Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Get Blob Properties (Obter Propriedades do Blob) Leitura Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Obter Etiquetas de Blob

Leitura x-ms-if-tags (versão 2019-12-12 e posteriores)

Para as condições no blob (versão 2025-11-05 e posteriores):

- x-ms-blob-se-modificado-desde

- x-ms-blob-if-unmodified-since

- x-ms-blob-se-corresponder

- x-ms-blob-se-nenhum-correspondência
Obtém a lista de bloqueio Leitura x-ms-if-tags
Obtenha Intervalos de Páginas Leitura Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Lease Blob (Blob de Concessão) Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Contentor de Arrendamento Escreve Se-Modificado-Já

Se-Não-Modificado-Desde
Colocar Blob a partir da URL Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

Para condições no blob de origem:

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

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

- x-ms-source-If-Match

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

Colocar Blob Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Colocar Bloquear a partir da URL

(versão 2018-03-28 e posteriores)
Escreve x-ms-source-If-Modified-Since

x-ms-source-If-Unmodified-Since

x-ms-source-If-Match

x-ms-source-If-None-Match
Lista de bloqueio Put Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Colocar página Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Colocar Página a partir da URL

(versão 2018-11-09 e posteriores)
Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Definir metadados de Blob Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Definir propriedades de Blob Escreve Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Definir ACL de contêiner Escreve Se-Modificado-Já

Se-Não-Modificado-Desde
Metadados do Contentor Definir Escreve Se-Modificado-Já
Definir Etiquetas de Blob

Escreve x-ms-if-tags (versão 2019-12-12 e posteriores)

Para as condições no blob (versão 2025-11-05 e posteriores):

- x-ms-blob-se-modificado-desde

- x-ms-blob-if-unmodified-since

- x-ms-blob-se-corresponder

- x-ms-blob-se-nenhum-correspondência
Set Blob Tier (Definir Camada de Blob) Escreve x-ms-if-tags
Blob de instantâneos Leitura Se-Modificado-Já

Se-Não-Modificado-Desde

If-Match

Se-Nenhum-Jogo

x-ms-if-tags
Definir Política de Imutabilidade do Blob Escreve Se-Não-Modificado-Desde

As seguintes operações de dados de serviço Blob não suportam atualmente cabeçalhos condicionais:

Códigos de resposta HTTP para operações que suportam cabeçalhos condicionais

Se o pedido incluir um cabeçalho condicional e o recurso solicitado não cumprir a condição especificada, o serviço Blob devolve um código de resposta HTTP. Os códigos de resposta devolvidos estão de acordo com a especificação do protocolo HTTP/1.1 (RFC 2616).

Os métodos na biblioteca cliente Azure .NET convertem estes códigos de resposta a erro num objeto StorageException.

Ler Operações

A tabela seguinte indica os códigos de resposta devolvidos para uma condição não satisfeita para cada cabeçalho condicional quando a operação é uma operação de leitura. As operações de leitura usam os verbos GET ou HEAD.

Cabeçalho condicional Código de resposta se a condição não for cumprida
If-Modified-Since Não Modificado (304 (Não Modificado))
If-Unmodified-Since Pré-condição Falhada (412 (Pré-condição Falhada))
If-Match Pré-condição Falhada (412 (Pré-condição Falhada))
If-None-Match Não Modificado (304 (Não Modificado))

Consulte os exemplos anteriores para obter resultados ao utilizar múltiplos cabeçalhos com versões 2013-08-15 ou posteriores.

Operações de Escrita

A tabela seguinte indica os códigos de resposta devolvidos para uma condição não satisfeita para cada cabeçalho condicional quando a operação é uma operação de escrita. As operações de escrita usam os verbos PUT ou DELETE.

Cabeçalho condicional Código de resposta se a condição não for cumprida
If-Modified-Since Pré-condição Falhada (412 (Pré-condição Falhada))
If-Unmodified-Since Pré-condição Falhada (412 (Pré-condição Falhada))
If-Match Pré-condição Falhada (412 (Pré-condição Falhada))
If-None-Match Pré-condição Falhada (412 (Pré-condição Falhada))

Operações de Cópia

A tabela seguinte indica os códigos de resposta devolvidos para uma condição não satisfeita para cada cabeçalho condicional quando a operação é uma operação de cópia. A operação Copy Blob utiliza os verbos PUT.

Cabeçalho condicional Código de resposta se a condição não for cumprida
If-Modified-Since Pré-condição Falhada (412 (Pré-condição Falhada))
If-Unmodified-Since Pré-condição Falhada (412 (Pré-condição Falhada))
If-Match Pré-condição Falhada (412 (Pré-condição Falhada))
If-None-Match Pré-condição Falhada (412 (Pré-condição Falhada))
x-ms-source-if-modified-since Pré-condição Falhada (412 (Pré-condição Falhada))
x-ms-source-if-unmodified-since Pré-condição Falhada (412 (Pré-condição Falhada))
x-ms-source-if-match Pré-condição Falhada (412 (Pré-condição Falhada))
x-ms-source-if-none-match Pré-condição Falhada (412 (Pré-condição Falhada))

Etiquetas Operações Condicionais

Para além dos cabeçalhos condicionais HTTP padrão suportados pelo serviço Blob, várias operações também suportam condições contra as etiquetas num recurso blob.

Cabeçalho condicional Description
x-ms-if-tags Versão 2019-12-12 e mais recente. Um valor de TagsPredicate. Especifique este cabeçalho para realizar a operação apenas se o predicado for avaliado contra true as etiquetas do blob.
x-ms-source-if-tags Versão 2019-12-12 e mais recente. Aplica-se apenas ao Copy Blob. Um valor de TagsPredicate. Especifique este cabeçalho para realizar a operação apenas se o predicado for avaliado contra true as etiquetas do blob de origem.

Se o x-ms-if-tags cabeçalho condicional de ou x-ms-source-if-tags estiver presente num pedido e o TagsPredicate avaliar para false, o serviço Blob devolve o código de erro 412 (Falha de Pré-condição) para a operação.

O chamador deve ter permissão para ler as etiquetas de um blob para usar os x-ms-if-tags cabeçalhos condicionais de OR x-ms-source-if-tags .

Etiquetas Sintaxe de Predicados

O serviço Blob suporta um subconjunto da gramática da cláusula ANSI SQL WHERE para o valor do TagsPredicate cabeçalho. São suportados os seguintes operadores:

Operator Description Example
= Igual Status = 'In Progress'
<> Não é igual Status <> 'Done'
> Maior que LastModified > '2018-06-18 20:51:26Z'
>= Maior ou igual Priority >= '05'
< Menos de Age < '032'
<= Menor ou igual Reviewer <= 'Smith'
AND Lógico e Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR Lógico ou Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

Todos os valores das etiquetas são cadeias, e os operadores relacionais binários suportados utilizam uma ordenação lexicográfica dos valores das etiquetas. Para suportar tipos de dados sem cadeia, incluindo números e datas, deve ser utilizado um enchimento adequado e uma formatação ordenável. Os valores das etiquetas devem estar incluídos entre aspas simples.

Se os nomes das etiquetas forem identificadores SQL normais, podem estar presentes sem escapar. Se contiverem caracteres especiais, devem ser delimitados com aspas duplas, como "TagName" = 'TagValue'.

As expressões podem incluir comparações para múltiplos nomes e valores de etiquetas. Parênteses (( e )) podem ser usados para agrupar expressões lógicas e controlar a ordem canónica de operação. A TagsPredicate pode incluir no máximo 10 operações lógicas.

O serviço de armazenamento rejeita qualquer pedido que contenha uma expressão inválida com código de erro 400 (Pedido Mau).

Ver também

Conceitos de Serviço de Blob