Specifica delle intestazioni condizionali per le operazioni del servizio BLOB

Diverse operazioni del servizio Blob supportano l'utilizzo delle intestazioni condizionali. È possibile specificare le intestazioni condizionali per eseguire un'operazione solo se è stata soddisfatta una condizione specificata.

Il servizio BLOB segue la specifica del protocollo HTTP/1.1 per le intestazioni condizionali.

Intestazioni condizionali supportate

Nella tabella seguente vengono descritte le intestazioni condizionali supportate.

Intestazione condizionale Descrizione
If-Modified-Since Valore DateTime. Il formato data è conforme a RFC 1123. Per altre informazioni, vedere Rappresentazione dei valori di data e ora nelle intestazioni. Specificare questa intestazione per eseguire l'operazione solo se la risorsa è stata modificata dopo l'ora specificata.
If-Unmodified-Since Valore DateTime. Il formato data è conforme a RFC 1123. Per altre informazioni, vedere Rappresentazione dei valori di data e ora nelle intestazioni. Specificare questa intestazione per eseguire l'operazione solo se la risorsa non è stata modificata dopo l'ora e la data specificate.
If-Match Valore ETag. Specificare questa intestazione per eseguire l'operazione solo se il valore ETag della risorsa corrisponde al valore specificato. Per la versione 2011-08-18 e successive, il valore ETag può essere specificato tra virgolette.
If-None-Match Valore ETag o il carattere jolly (*). Specificare questa intestazione per eseguire l'operazione solo se il valore ETag della risorsa non corrisponde al valore specificato. Per la versione 2011-08-18 e successive, il valore ETag può essere specificato tra virgolette.

Specificare il carattere jolly (*) per eseguire l'operazione solo se la risorsa non esiste. In caso contrario, se la risorsa esiste l'operazione ha esito negativo.

Specifica di intestazioni condizionali per le operazioni di lettura del servizio Blob nella versione 2013-08-15 o successive

A partire dalla versione 2013-08-15, le operazioni Get BLOB e Get BLOB Properties supportano più intestazioni condizionali. È possibile specificare qualsiasi combinazione di intestazioni condizionali supportate. Il servizio Blob valuterà queste condizioni in base alla seguente espressione:

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

È inoltre possibile fornire valori multipli delimitati da virgole per If-Match e If-None-Match. Se si specificano valori multipli per If-Match, il servizio Blob esegue un'operazione logica OR in tutti valori forniti prima della valutazione dell'intera espressione. Se si specificano valori multipli per if-None-Match, il servizio esegue un'operazione logica AND prima della valutazione dell'intera espressione. La specifica di valori multipli per If-Modified-Since e If-Unmodified-Since non è supportata e genera il codice di errore 400 (Bad Request).

Questa funzionalità è abilitata per garantire la conformità alle specifiche HTTP/1.1 e per soddisfare gli scenari in cui una rete per la distribuzione di contenuti (CDN) o un server proxy aggiunge intestazioni condizionali aggiuntive a una richiesta in corso. Di seguito sono riportati alcuni esempi di combinazioni diverse di intestazioni condizionali.

Esempio 1:

Prendere in considerazione una richiesta Get BLOB contenente le If-Match intestazioni e If-Modified-Since . Nella tabella seguente viene indicato il risultato se le intestazioni vengono valutate singolarmente e il risultato se vengono valutate in combinazione.

Intestazioni condizionali Risultato se valutato singolarmente Risultato se valutato in combinazione
If-Match 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Modified-Since 200 (OK) 412 (Condizione preliminare non riuscita)
If-Match 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Modified-Since 304 (Non modificato) 412 (Condizione preliminare non riuscita)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 304 (Non modificato)
If-Modified-Since 304 (Non modificato) 304 (Non modificato)

Esempio 2:

Si consideri una richiesta contenente le intestazioni If-None-Match e If-Modified-Since.

Intestazioni condizionali Risultato se valutato singolarmente Risultato se valutato in combinazione
If-None-Match 304 (Non modificato) 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 (Non modificato) 200 (OK)
If-None-Match 304 (Non modificato) 304 (Non modificato)
If-Modified-Since 304 (Non modificato) 304 (Non modificato)

Esempio 3:

Si consideri una richiesta contenente le intestazioni If-Modified-Since, If-Match e If-Unmodified-Since.

Intestazioni condizionali Risultato se valutato singolarmente Risultato se valutato in combinazione
If-Modified-Since 200 (OK) 412 (Condizione preliminare non riuscita)
If-Match 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Unmodified-Since 200 (OK) 412 (Condizione preliminare non riuscita)
If-Modified-Since 200 (OK) 412 (Condizione preliminare non riuscita)
If-Match 200 (OK) 412 (Condizione preliminare non riuscita)
If-Unmodified-Since 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Modified-Since 304 (Non modificato) 412 (Condizione preliminare non riuscita)
If-Match 200 (OK) 412 (Condizione preliminare non riuscita)
If-Unmodified-Since 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Modified-Since 304 (Non modificato) 304 (Non modificato)
If-Match 200 (OK) 304 (Non modificato)
If-Unmodified-Since 200 (OK) 304 (Non modificato)

Esempio 4:

Si consideri una richiesta contenente le intestazioni If-Modified-Since, If-None-Match, If-Unmodified-Since e If-Match.

Combinazione Codice di stato HTTP singolo Risultato dello stato 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 (Condizione preliminare non riuscita)
If-None-Match 304 (Non modificato) 412 (Condizione preliminare non riuscita)
If-Unmodified-Since 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Match 200 (OK) 412 (Condizione preliminare non riuscita)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 304 (Non modificato) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (Non modificato) 412 (Condizione preliminare non riuscita)
If-None-Match 200 (OK) 412 (Condizione preliminare non riuscita)
If-Unmodified-Since 200 (OK) 412 (Condizione preliminare non riuscita)
If-Match 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Modified-Since 304 (Non modificato) 412 (Condizione preliminare non riuscita)
If-None-Match 200 (OK) 412 (Condizione preliminare non riuscita)
If-Unmodified-Since 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Match 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Modified-Since 304 (Non modificato) 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 (Non modificato) 412 (Condizione preliminare non riuscita)
If-None-Match 304 (Non modificato) 412 (Condizione preliminare non riuscita)
If-Unmodified-Since 412 (Condizione preliminare non riuscita) 412 (Condizione preliminare non riuscita)
If-Match 200 (OK) 412 (Condizione preliminare non riuscita)

Definizione di intestazioni condizionali per le operazioni di lettura nelle versioni precedenti alla 2013-08-15 e per le operazioni di scrittura (tutte le versioni)

Quando si chiamano operazioni di lettura del servizio BLOB (Get BLOB e Get BLOB Properties) con versioni precedenti al 2013-08-15 e quando si chiama qualsiasi operazione di scrittura indipendentemente dalla versione, tenere presente quanto segue:

  • Se una richiesta specifica le intestazioni If-None-Match e If-Modified-Since, la richiesta viene valutata in base ai criteri specificati in If-None-Match.

  • Se una richiesta specifica le intestazioni If-Match e If-Unmodified-Since, la richiesta viene valutata in base ai criteri specificati in If-Match.

  • Ad eccezione delle due combinazioni di intestazioni condizionali elencate sopra, una richiesta può specificare una sola intestazione condizionale. La definizione di più intestazioni condizionali comporta la restituzione del codice di stato 400 (Bad Request).

  • Se una risposta include un valore ETag, verificare la versione della richiesta e della risposta prima di elaborare il valore ETag. Ad esempio, a differenza delle versioni precedenti, la versione 2011-08-18 e quelle successive restituiscono un valore ETag tra virgolette. Assicurarsi che l'applicazione possa elaborare entrambi i formati ETag prima che vengano valutati.

  • RFC 2616 consente più valori ETag in una singola intestazione, ma le richieste al servizio BLOB possono includere un solo valore ETag. La definizione di più valori ETag genera il codice di stato 400 (Bad Request).

Operazioni che supportano le intestazioni condizionali

Nella tabella seguente vengono descritte le operazioni che supportano le intestazioni condizionali.

Operazione REST Tipo di operazione Intestazioni condizionali supportate
Append Block

(versione 2015-02-21 e successiva)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Aggiungi blocco dall'URL

(versione 2018-11-09 e successiva)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Copy Blob Lettura e scrittura Per le condizioni sul Blob di destinazione:

- If-Modified-Since

- If-Unmodified-Since

- If-Match

- If-None-Match

- x-ms-if-tags

Per le condizioni sul Blob di origine:

- 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
Eliminare un BLOB Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since
Get Blob Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Ottenere tag BLOB

(versione 2019-12-12 e successiva)
Read x-ms-if-tags
Get Block List Read x-ms-if-tags
Get Page Ranges Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Lease BLOB Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since
Inserire BLOB dall'URL Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Per le condizioni sul Blob di origine:

- 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 Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Inserisci blocco dall'URL

(versione 2018-03-28 e successiva)
Write 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 Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Page From URL

(versione 2018-11-09 e successive)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Set Container ACL Write If-Modified-Since

If-Unmodified-Since
Impostare i metadati del contenitore Write If-Modified-Since
Impostare tag BLOB

(versione 2019-12-12 e successive)
Write x-ms-if-tags
Set Blob Tier Lettura o scrittura x-ms-if-tags
Snapshot Blob Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Impostare i criteri di immutabilità BLOB Write If-Unmodified-Since

Le seguenti operazioni dei dati del servizio Blob non supportano attualmente le intestazioni condizionali:

Codici di risposta HTTP per operazioni che supportano le intestazioni condizionali

Se la richiesta include un'intestazione condizionale e la condizione specificata non è soddisfatta dalla risorsa richiesta, il servizio Blob restituisce un codice di risposta HTTP. I codici di risposta restituiti sono conformi alla specifica del protocollo HTTP/1.1 (RFC 2616).

I metodi nella libreria client .NET di Azure convertono questi codici di risposta di errore in un oggetto StorageException.

Operazioni di lettura

Nella tabella seguente sono indicati i codici di risposta restituiti per una condizione non soddisfatta per ogni intestazione condizionale se l'operazione è un'operazione di lettura. Le operazioni di lettura utilizzano i verbi GET o HEAD.

Intestazione condizionale Codice di risposta se la condizione non è stata soddisfatta
If-Modified-Since Non modificato (304 (non modificato))
If-Unmodified-Since Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-Match Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-None-Match Non modificato (304 (non modificato))

Vedere gli esempi precedenti per i risultati quando si utilizzano intestazioni multiple con la versione 2013-08-15 o successive.

Operazioni di scrittura

Nella tabella seguente sono indicati i codici di risposta restituiti per una condizione non soddisfatta per ogni intestazione condizionale se l'operazione è un'operazione di scrittura. Le operazioni di scrittura utilizzano i verbi PUT o DELETE.

Intestazione condizionale Codice di risposta se la condizione non è stata soddisfatta
If-Modified-Since Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-Unmodified-Since Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-Match Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-None-Match Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))

Operazioni di copia

Nella tabella seguente sono indicati i codici di risposta restituiti per una condizione non soddisfatta per ogni intestazione condizionale se l'operazione è un'operazione di copia. L'operazione Copia BLOB usa i verbi PUT.

Intestazione condizionale Codice di risposta se la condizione non è stata soddisfatta
If-Modified-Since Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-Unmodified-Since Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-Match Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
If-None-Match Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
x-ms-source-if-modified-since Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
x-ms-source-if-unmodified-since Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
x-ms-source-if-match Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))
x-ms-source-if-none-match Condizione preliminare non riuscita (412 (Condizione preliminare non riuscita))

Operazioni condizionali tag

Oltre alle intestazioni condizionali HTTP standard supportate dal servizio BLOB, diverse operazioni supportano anche le condizioni rispetto ai tag in una risorsa BLOB.

Intestazione condizionale Descrizione
x-ms-if-tags Versione 2019-12-12 e versioni successive. Valore TagsPredicate. Specificare questa intestazione per eseguire l'operazione solo se il predicato restituisce true i tag del BLOB.
x-ms-source-if-tags Versione 2019-12-12 e versioni successive. Si applica solo a Copia BLOB. Valore TagsPredicate. Specificare questa intestazione per eseguire l'operazione solo se il predicato restituisce true i tag del BLOB di origine.

Se l'intestazione x-ms-if-tags condizionale o x-ms-source-if-tags è presente in una richiesta e restituisce TagsPredicatefalse, il servizio BLOB restituirà il codice di errore 412 (Precondizione non riuscita) per l'operazione.

Il chiamante deve disporre dell'autorizzazione per leggere i tag in un BLOB per usare le x-ms-if-tags intestazioni o x-ms-source-if-tags condizionali.

Sintassi predicato tag

Il servizio BLOB supporta un subset della grammatica della clausola ANSI SQL WHERE per il valore dell'intestazione TagsPredicate . Sono supportati gli operatori seguenti:

Operatore Descrizione Esempio
= Uguale a Status = 'In Progress'
<> Diverso da Status <> 'Done'
> Maggiore di LastModified > '2018-06-18 20:51:26Z'
>= Maggiore o uguale a Priority >= '05'
< Minore di Age < '032'
<= Minore o uguale a Reviewer <= 'Smith'
AND Logico e Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR Logica o Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

Tutti i valori di tag sono stringhe e gli operatori relazionali binari supportati usano un ordinamento lessicografico dei valori del tag. Per supportare tipi di dati non stringa, inclusi i numeri e le date, è necessario usare la formattazione spaziatura interna e ordinabile appropriata. I valori dei tag devono essere racchiusi tra virgolette singole.

Se i nomi dei tag sono identificatori SQL regolari, possono essere presenti senza escaping; se contengono caratteri speciali, devono essere delimitati con virgolette doppie (ad esempio "TagName" = 'TagValue').

Le espressioni possono includere confronti per più nomi e valori di tag. Le parentesi (( e )) possono essere usate per raggruppare espressioni logiche e controllare l'ordine canonico dell'operazione. Un TagsPredicate può includere al massimo dieci (10) operazioni logiche.

Il servizio di archiviazione rifiuterà qualsiasi richiesta contenente un'espressione non valida con codice di errore 400 (richiesta non valida).

Vedere anche

Concetti relativi al servizio Blob