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 data-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 data-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 rispettare le specifiche HTTP/1.1 e 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 le operazioni di lettura del servizio BLOB (Get BLOB e Get BLOB Properties) con versioni precedenti alla versione 2013-08-15 e quando si chiama un'operazione di scrittura indipendentemente dalla versione, tenere presente quanto segue:
Se una richiesta specifica le intestazioni
If-None-Match
eIf-Modified-Since
, la richiesta viene valutata in base ai criteri specificati inIf-None-Match
.Se una richiesta specifica le intestazioni
If-Match
eIf-Unmodified-Since
, la richiesta viene valutata in base ai criteri specificati inIf-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 successive) |
Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Aggiungi blocco da URL (versione 2018-11-09 e successive) |
Scrittura |
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 | Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Delete Container | Scrittura |
If-Modified-Since If-Unmodified-Since |
Get Blob | Lettura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Get Blob Metadata | Lettura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Get Blob Properties | Lettura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Ottenere tag BLOB (versione 2019-12-12 e successive) |
Lettura | x-ms-if-tags |
Get Block List | Lettura | x-ms-if-tags |
Get Page Ranges | Lettura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Lease BLOB | Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Lease Container | Scrittura |
If-Modified-Since If-Unmodified-Since |
Put Blob From URL | Scrittura |
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 | Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Inserisci blocco da URL (versione 2018-03-28 e successive) |
Scrittura |
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 | Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Put Page | Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Inserisci pagina dall'URL (versione 2018-11-09 e successiva) |
Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Set Blob Metadata | Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Set Blob Properties | Scrittura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Set Container ACL | Scrittura |
If-Modified-Since If-Unmodified-Since |
Impostare i metadati del contenitore | Scrittura | If-Modified-Since |
Impostare tag BLOB (versione 2019-12-12 e successiva) |
Scrittura | x-ms-if-tags |
Set Blob Tier | Scrittura | x-ms-if-tags |
Snapshot Blob | Lettura |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Impostare criteri di non modificabilità BLOB | Scrittura | 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 converte 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 Copy 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 TagsPredicate
false
, 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).