Compartilhar via


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

Várias operações de serviço Blob suportam o uso de cabeçalhos condicionais. Você pode especificar cabeçalhos condicionais para realizar uma operação apenas quando uma condição especificada for atendida.

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 a seguir.

Cabeçalho condicional Description
If-Modified-Since Um DateTime valor. O formato de data segue o RFC 1123. Para mais informações, veja Representação de valores de data-hora em cabeçalhos. Especifique esse cabeçalho para realizar a operação somente se o recurso foi modificado desde o tempo especificado.
If-Unmodified-Since Um DateTime valor. O formato de data segue o RFC 1123. Para mais informações, veja Representação de valores de data-hora em cabeçalhos. Especifique esse cabeçalho para realizar a operação somente se o recurso não foi 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 em diante, o ETag pode ser especificado entre aspas.
If-None-Match Um valor ETag ou o caractere curinga (*). Especifique esse cabeçalho para realizar a operação somente se o ETag do recurso não corresponder ao valor especificado. Para as versões de 2011-08-18 em diante, o ETag pode ser especificado entre aspas.

Especifique o caractere coringa (*) para realizar a operação somente se o recurso não existir, e falhe a operação se ele existir.

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

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

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

Você também pode fornecer múltiplos valores separados por vírgulas para If-Match e If-None-Match. Se você 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 você 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).

Esse recurso é ativado para cumprir a especificação HTTP/1.1. Também atende a cenários em que uma Rede de Entrega de Conteúdo (CDN) ou servidor proxy adiciona cabeçalhos condicionais adicionais a uma solicitação em voo. Os exemplos a seguir ilustram várias combinações diferentes de cabeçalhos condicionais.

Exemplo 1:

Considere uma solicitação Get Blob contendo os If-Match cabeçalhos e If-Modified-Since . A tabela a seguir indica o resultado se os cabeçalhos forem avaliados individualmente, e o resultado se forem avaliados em combinação.

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 uma requisição 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 uma solicitação 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 uma solicitação contendo If-Modified-Since, If-None-Match, If-Unmodified-Since, e If-Match cabeçalhos.

Combinação Código de status http individual Obtenha o resultado do status 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)

Especifique cabeçalhos condicionais para operações de leitura em versões anteriores a 15-08-2013 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 15-08-2013, e ao chamar qualquer operação de escrita independentemente da versão, tenha em mente as seguintes considerações:

  • Se uma solicitação especificar tanto os cabeçalhos e If-None-MatchIf-Modified-Since quant, a solicitação é avaliada com base nos critérios especificados em If-None-Match.

  • Se uma solicitação especificar tanto os cabeçalhos e If-MatchIf-Unmodified-Since quant, a solicitação é avaliada com base nos critérios especificados em If-Match.

  • Exceto pelas duas combinações de cabeçalhos condicionais listadas anteriormente, uma solicitação pode especificar apenas um cabeçalho condicional. Especificar mais de um cabeçalho condicional resulta no código de status 400 (Bad Request).

  • Se uma resposta incluir um ETag, verifique a versão da solicitação e da resposta antes de processar o ETag. Por exemplo, a versão 2011-08-18 e posteriores retornam um ETag citado, mas versões antigas não. Certifique-se de que sua candidatura possa processar ambos os formatos ETag antes que sejam avaliados.

  • O RFC 2616 permite múltiplos valores ETag em um único cabeçalho, mas requisições ao serviço Blob só podem incluir um valor ETag. Especificar mais de um valor ETag resulta no código de status 400 (Bad Request).

Operações que suportam cabeçalhos condicionais

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

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

(versão 2015-02-21 e posterior)
Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Adicionar Bloco da URL

(versão 2018-11-09 e posterior)
Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

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

- Se-Modificado-Já

- Se-Não-Modificado-Já

- If-Match

- Se-Nenhum-Combinação

- 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
Excluir Blob Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Excluir Contêiner Escrever Se-Modificado-Já

Se-Não-Modificado-Já
Pega o Blob Leitura Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Obter metadados do blob Leitura Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Obter propriedades de blob Leitura Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Obter marcas de blob

Leitura X-ms-if-tags (versão 2019-12-12 e posterior)

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

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

- x-ms-blob-se-não modificado-desde

- x-ms-blob-if-match

- x-ms-blob-se-nenhum-corresponder
Obtenha a lista de bloqueio Leitura x-ms-if-tags
Obtenha Intervalos de Páginas Leitura Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Concessão de blob Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Contêiner de Aluguel Escrever Se-Modificado-Já

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

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

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 Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

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

(versão 2018-03-28 e posterior)
Escrever 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 de put Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Colocar Página Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Coloque a página a partir da URL

(versão 2018-11-09 e posterior)
Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Definir Metadados de Blob Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Definir Propriedades do Blob Escrever Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Definir ACL do contêiner Escrever Se-Modificado-Já

Se-Não-Modificado-Já
Metadados do Contêiner Definir Escrever Se-Modificado-Já
Definir marcas de blob

Escrever X-ms-if-tags (versão 2019-12-12 e posterior)

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

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

- x-ms-blob-se-não modificado-desde

- x-ms-blob-if-match

- x-ms-blob-se-nenhum-corresponder
Definir Camada do Blob Escrever x-ms-if-tags
Snapshot Blob Leitura Se-Modificado-Já

Se-Não-Modificado-Já

If-Match

Se-Nenhum-Combinação

x-ms-if-tags
Definir Política de Imutabilidade do Blob Escrever Se-Não-Modificado-Já

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

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

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

Métodos na biblioteca cliente Azure .NET convertem esses códigos de resposta a erro em um objeto StorageException.

Leia Operações

A tabela a seguir indica os códigos de resposta retornados 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 caso a condição não seja cumprida
If-Modified-Since Não Modificado (304 (Não Modificado))
If-Unmodified-Since Pré-condição Falhou (412 (Pré-condição Falhou))
If-Match Pré-condição Falhou (412 (Pré-condição Falhou))
If-None-Match Não Modificado (304 (Não Modificado))

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

Operações de Escrita

A tabela a seguir indica os códigos de resposta retornados 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 caso a condição não seja cumprida
If-Modified-Since Pré-condição Falhou (412 (Pré-condição Falhou))
If-Unmodified-Since Pré-condição Falhou (412 (Pré-condição Falhou))
If-Match Pré-condição Falhou (412 (Pré-condição Falhou))
If-None-Match Pré-condição Falhou (412 (Pré-condição Falhou))

Operações de cópia

A tabela a seguir indica os códigos de resposta retornados 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 usa os verbos PUT.

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

Tags: Operações Condicionais

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 tags em um recurso blob.

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

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

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

Tags: 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'
< Menor que Age < '032'
<= Inferior 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 de tag são strings, e os operadores relacionais binários suportados usam uma ordenação lexicográfica dos valores da tag. Para suportar tipos de dados sem cadeia, incluindo números e datas, é necessário preencher apropriado e formatação ordenável. Os valores das etiquetas devem estar incluídos entre aspas simples.

Se os nomes das tags forem identificadores SQL comuns, eles podem estar presentes sem escapar. Se contêm caracteres especiais, devem ser delimitados com aspas duplas, como "TagName" = 'TagValue'.

Expressões podem incluir comparações para múltiplos nomes e valores de tags. 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 requisição que contenha uma expressão inválida com código de erro 400 (Solicitação Inválida).

Consulte Também

Conceitos de Serviço Blob