Voorwaardelijke headers opgeven voor blobservicebewerkingen
Verschillende Blob-servicebewerkingen ondersteunen het gebruik van voorwaardelijke headers. U kunt voorwaardelijke headers opgeven om een bewerking alleen uit te voeren als aan een opgegeven voorwaarde is voldaan.
De Blob-service volgt de HTTP/1.1-protocolspecificatie voor voorwaardelijke headers.
Ondersteunde voorwaardelijke headers
De ondersteunde voorwaardelijke headers worden beschreven in de volgende tabel.
Voorwaardelijke header | Description |
---|---|
If-Modified-Since |
Een DateTime waarde. De datumnotatie volgt RFC 1123. Zie Weergave van datum-tijdwaarden in kopteksten voor meer informatie. Geef deze header op om de bewerking alleen uit te voeren als de resource sinds het opgegeven tijdstip is gewijzigd. |
If-Unmodified-Since |
Een DateTime waarde. De datumnotatie volgt RFC 1123. Zie Weergave van datum-tijdwaarden in kopteksten voor meer informatie. Geef deze header op om de bewerking alleen uit te voeren als de resource niet is gewijzigd sinds de opgegeven datum/tijd. |
If-Match |
Een ETag-waarde. Geef deze header op om de bewerking alleen uit te voeren als de ETag van de resource overeenkomt met de opgegeven waarde. Voor versies 2011-08-18 en hoger kan de ETag tussen aanhalingstekens worden opgegeven. |
If-None-Match |
Een ETag-waarde of het jokerteken (*). Geef deze header op om de bewerking alleen uit te voeren als de ETag van de resource niet overeenkomt met de opgegeven waarde. Voor versies 2011-08-18 en hoger kan de ETag tussen aanhalingstekens worden opgegeven. Geef het jokerteken (*) op om de bewerking alleen uit te voeren als de resource niet bestaat en mislukt de bewerking als deze wel bestaat. |
Voorwaardelijke headers opgeven voor leesbewerkingen in blobservice in versie 2013-08-15 of hoger
Vanaf versie 2013-08-15 ondersteunen de bewerkingen Blob ophalen en Blobeigenschappen ophalen meerdere voorwaardelijke headers. U kunt elke combinatie van ondersteunde voorwaardelijke headers opgeven. De Blob-service evalueert deze voorwaarden volgens de volgende expressie:
If-Match && If-Unmodified-Since && (If-None-Match || If-Modified-Since)
U kunt ook meerdere door komma's gescheiden waarden opgeven voor If-Match
en If-None-Match
. Als u meerdere waarden opgeeft voor If-Match
, voert de Blob-service een logische OR
bewerking uit op alle opgegeven waarden voordat de hele expressie wordt geëvalueerd. Als u meerdere waarden opgeeft voor if-None-Match
, voert de service een logische AND
bewerking uit voordat de hele expressie wordt geëvalueerd. Het opgeven van meerdere waarden voor If-Modified-Since
en If-Unmodified-Since
wordt niet ondersteund en resulteert in foutcode 400 (Bad Request
).
Deze functie is ingeschakeld om te voldoen aan de HTTP/1.1-specificatie en om tegemoet te komen aan scenario's waarin een Content Delivery Network (CDN) of proxyserver aanvullende voorwaardelijke headers toevoegt aan een aanvraag voor inflight. Hieronder ziet u enkele voorbeelden van verschillende combinaties van voorwaardelijke headers.
Voorbeeld 1:
Overweeg een Get Blob-aanvraag met de If-Match
headers en If-Modified-Since
. De volgende tabel geeft het resultaat aan als de kopteksten afzonderlijk worden geëvalueerd en het resultaat als ze in combinatie worden geëvalueerd.
Voorwaardelijke headers | Resultaat indien afzonderlijk geëvalueerd | Resultaat indien geëvalueerd in combinatie |
---|---|---|
If-Match |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Match |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
304 (niet gewijzigd) | 412 (voorwaarde is mislukt) |
If-Match |
200 (OK) | 200 (OK) |
If-Modified-Since |
200 (OK) | 200 (OK) |
If-Match |
200 (OK) | 304 (niet gewijzigd) |
If-Modified-Since |
304 (niet gewijzigd) | 304 (niet gewijzigd) |
Voorbeeld 2:
Overweeg een aanvraag met If-None-Match
headers en If-Modified-Since
.
Voorwaardelijke headers | Resultaat indien afzonderlijk geëvalueerd | Resultaat indien geëvalueerd in combinatie |
---|---|---|
If-None-Match |
304 (niet gewijzigd) | 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 (niet gewijzigd) | 200 (OK) |
If-None-Match |
304 (niet gewijzigd) | 304 (niet gewijzigd) |
If-Modified-Since |
304 (niet gewijzigd) | 304 (niet gewijzigd) |
Voorbeeld 3:
Overweeg een aanvraag met If-Modified-Since
, If-Match
en-headers If-Unmodified-Since
.
Voorwaardelijke headers | Resultaat indien afzonderlijk geëvalueerd | Resultaat indien geëvalueerd in combinatie |
---|---|---|
If-Modified-Since |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Match |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Unmodified-Since |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Match |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Unmodified-Since |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
304 (niet gewijzigd) | 412 (voorwaarde is mislukt) |
If-Match |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Unmodified-Since |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
304 (niet gewijzigd) | 304 (niet gewijzigd) |
If-Match |
200 (OK) | 304 (niet gewijzigd) |
If-Unmodified-Since |
200 (OK) | 304 (niet gewijzigd) |
Voorbeeld 4:
Overweeg een aanvraag met If-Modified-Since
headers , If-None-Match
If-Unmodified-Since
enIf-Match
.
Combinatie | Afzonderlijke HTTP-statuscode | Blobstatusresultaat ophalen |
---|---|---|
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 (voorwaarde is mislukt) |
If-None-Match |
304 (niet gewijzigd) | 412 (voorwaarde is mislukt) |
If-Unmodified-Since |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Match |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
200 (OK) | 200 (OK) |
If-None-Match |
304 (niet gewijzigd) | 200 (OK) |
If-Unmodified-Since |
200 (OK) | 200 (OK) |
If-Match |
200 (OK) | 200 (OK) |
If-Modified-Since |
304 (niet gewijzigd) | 412 (voorwaarde is mislukt) |
If-None-Match |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Unmodified-Since |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Match |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
304 (niet gewijzigd) | 412 (voorwaarde is mislukt) |
If-None-Match |
200 (OK) | 412 (voorwaarde is mislukt) |
If-Unmodified-Since |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Match |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Modified-Since |
304 (niet gewijzigd) | 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 (niet gewijzigd) | 412 (voorwaarde is mislukt) |
If-None-Match |
304 (niet gewijzigd) | 412 (voorwaarde is mislukt) |
If-Unmodified-Since |
412 (voorwaarde is mislukt) | 412 (voorwaarde is mislukt) |
If-Match |
200 (OK) | 412 (voorwaarde is mislukt) |
Voorwaardelijke headers opgeven voor leesbewerkingen in versies vóór 15-08-2013 en voor schrijfbewerkingen (alle versies)
Wanneer u leesbewerkingen voor de Blob-service aanroept (Blob ophalen en Eigenschappen van blob ophalen) met versies ouder dan 2013-08-15 en bij het aanroepen van een schrijfbewerking, ongeacht de versie, moet u rekening houden met het volgende:
Als een aanvraag zowel de
If-None-Match
headers enIf-Modified-Since
opgeeft, wordt de aanvraag geëvalueerd op basis van de criteria die zijn opgegeven inIf-None-Match
.Als een aanvraag zowel de
If-Match
headers enIf-Unmodified-Since
opgeeft, wordt de aanvraag geëvalueerd op basis van de criteria die zijn opgegeven inIf-Match
.Met uitzondering van de twee combinaties van voorwaardelijke headers die hierboven worden vermeld, kan een aanvraag slechts één voorwaardelijke header opgeven. Als u meer dan één voorwaardelijke header opgeeft, resulteert dit in statuscode 400 (
Bad Request
).Als een antwoord een ETag bevat, controleert u de versie van de aanvraag en het antwoord voordat u de ETag verwerkt. Versie 2011-08-18 en hoger retourneren bijvoorbeeld een ETag met aanhalingstekens, maar oudere versies niet. Zorg ervoor dat uw toepassing beide ETag-indelingen kan verwerken voordat ze worden geëvalueerd.
RFC 2616 staat meerdere ETag-waarden toe in één header, maar aanvragen naar de Blob-service kunnen slechts één ETag-waarde bevatten. Als u meer dan één ETag-waarde opgeeft, resulteert dit in statuscode 400 (
Bad Request
).
Bewerkingen die voorwaardelijke headers ondersteunen
De bewerkingen die voorwaardelijke headers ondersteunen, worden beschreven in de volgende tabel.
REST-bewerking | Het type bewerking | Ondersteunde voorwaardelijke headers |
---|---|---|
Toevoegblok (versie 21-02-2015 en hoger) |
Schrijven |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blok toevoegen vanuit URL (versie 2018-11-09 en hoger) |
Schrijven |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob kopiëren | Lezen en schrijven | Voor voorwaarden op de doel-blob: - If-Modified-Since - If-Unmodified-Since - Als-overeenkomst - If-None-Match - x-ms-if-tags Voor voorwaarden op de bron-blob: - 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 |
Blob verwijderen | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Container verwijderen | Schrijven |
If-Modified-Since If-Unmodified-Since |
Blob ophalen | Lezen |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Metagegevens van blob ophalen | Lezen |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Blob-eigenschappen ophalen | Lezen |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Blobtags ophalen (versie 2019-12-12 en hoger) |
Lezen | x-ms-if-tags |
Blokkeringslijst ophalen | Lezen | x-ms-if-tags |
Paginabereiken ophalen | Lezen |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Lease-blob | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Leasecontainer | Schrijven |
If-Modified-Since If-Unmodified-Since |
Blob van URL plaatsen | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match Voor voorwaarden op de bron-blob: - x-ms-source-If-Modified-Since - x-ms-source-if-Unmodified-Since - x-ms-source-If-Match - x-ms-source-If-None-Match |
Blob plaatsen | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Blok van URL plaatsen (versie 28-03-2018 en hoger) |
Schrijven |
x-ms-source-If-Modified-Since x-ms-source-If-Unmodified-Since x-ms-source-If-Match x-ms-source-If-None-Match |
Lijst met blokkeringen plaatsen | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Pagina plaatsen | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Pagina van URL plaatsen (versie 2018-11-09 en hoger) |
Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Blobmetagegevens instellen | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Blobeigenschappen instellen | Schrijven |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Container-ACL instellen | Schrijven |
If-Modified-Since If-Unmodified-Since |
Containermetagegevens instellen | Schrijven | If-Modified-Since |
Blobtags instellen (versie 2019-12-12 en hoger) |
Schrijven | x-ms-if-tags |
Blob-laag instellen | Schrijven | x-ms-if-tags |
Momentopname maken van blob | Lezen |
If-Modified-Since If-Unmodified-Since Als-overeenkomst If-None-Match x-ms-if-tags |
Beleid voor onveranderbaarheid van blob instellen | Schrijven | If-Unmodified-Since |
De volgende blobservicegegevensbewerkingen bieden momenteel geen ondersteuning voor voorwaardelijke headers:
HTTP-antwoordcodes voor bewerkingen die voorwaardelijke headers ondersteunen
Als de aanvraag een voorwaardelijke header bevat en niet aan de opgegeven voorwaarde wordt voldaan door de resource die wordt aangevraagd, retourneert de Blob-service een HTTP-antwoordcode. De geretourneerde antwoordcodes zijn in overeenstemming met de HTTP/1.1-protocolspecificatie (RFC 2616).
Methoden in de Azure .NET-clientbibliotheek converteren deze foutcodes naar een StorageException-object.
Leesbewerkingen
In de volgende tabel ziet u de antwoordcodes die worden geretourneerd voor een niet-voldaan voorwaarde voor elke voorwaardelijke header wanneer de bewerking een leesbewerking is. Leesbewerkingen gebruiken de werkwoorden GET of HEAD.
Voorwaardelijke header | Antwoordcode als niet aan de voorwaarde is voldaan |
---|---|
If-Modified-Since |
Niet gewijzigd (304 (niet gewijzigd)) |
If-Unmodified-Since |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-Match |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-None-Match |
Niet gewijzigd (304 (niet gewijzigd)) |
Raadpleeg de bovenstaande voorbeelden voor resultaten bij het gebruik van meerdere headers met versies 2013-08-15 of hoger.
Schrijfbewerkingen
De volgende tabel geeft de antwoordcodes weer die worden geretourneerd voor een niet-voldaan voorwaarde voor elke voorwaardelijke header wanneer de bewerking een schrijfbewerking is. Schrijfbewerkingen maken gebruik van de werkwoorden PUT of DELETE.
Voorwaardelijke header | Antwoordcode als niet aan de voorwaarde is voldaan |
---|---|
If-Modified-Since |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-Unmodified-Since |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-Match |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-None-Match |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
Kopieerbewerkingen
De volgende tabel geeft de antwoordcodes weer die worden geretourneerd voor een niet-voldaan voorwaarde voor elke voorwaardelijke header wanneer de bewerking een kopieerbewerking is. De bewerking Blob kopiëren maakt gebruik van de werkwoorden PUT.
Voorwaardelijke header | Antwoordcode als niet aan de voorwaarde is voldaan |
---|---|
If-Modified-Since |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-Unmodified-Since |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-Match |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
If-None-Match |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
x-ms-source-if-modified-since |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
x-ms-source-if-unmodified-since |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
x-ms-source-if-match |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
x-ms-source-if-none-match |
Voorwaarde is mislukt (412 (voorwaarde mislukt)) |
Voorwaardelijke bewerkingen van tags
Naast de standaard voorwaardelijke HTTP-headers die worden ondersteund door de Blob-service, ondersteunen verschillende bewerkingen ook voorwaarden voor de tags op een blob-resource.
Voorwaardelijke header | Description |
---|---|
x-ms-if-tags |
Versie 2019-12-12 en hoger. Een TagsPredicate waarde. Geef deze header op om de bewerking alleen uit te voeren als het predicaat wordt geëvalueerd op true basis van de tags van de blob. |
x-ms-source-if-tags |
Versie 2019-12-12 en hoger. Is alleen van toepassing op blob kopiëren. Een TagsPredicate waarde. Geef deze header op om de bewerking alleen uit te voeren als het predicaat wordt geëvalueerd op true basis van de tags van de bron-blob. |
Als de x-ms-if-tags
voorwaardelijke header of x-ms-source-if-tags
aanwezig is in een aanvraag en de TagsPredicate
resulteert false
in , retourneert de Blob-service foutcode 412 (Voorwaarde is mislukt) voor de bewerking.
De aanroeper moet gemachtigd zijn om de tags op een blob te lezen om de x-ms-if-tags
voorwaardelijke headers of x-ms-source-if-tags
te gebruiken.
Syntaxis van tags predicaat
De Blob-service ondersteunt een subset van de grammatica van de ANSI SQL WHERE-component voor de waarde van de TagsPredicate
header. De volgende operators worden ondersteund:
Operator | Beschrijving | Voorbeeld |
---|---|---|
= |
Is gelijk aan | Status = 'In Progress' |
<> |
Is niet gelijk aan | Status <> 'Done' |
> |
Groter dan | LastModified > '2018-06-18 20:51:26Z' |
>= |
Groter dan of gelijk aan | Priority >= '05' |
< |
Kleiner dan | Age < '032' |
<= |
Kleiner dan of gelijk aan | Reviewer <= 'Smith' |
AND |
Logische en | Name > 'C' AND Name < 'D' Age > '032' AND Age < '100' |
OR |
Logische of | Status = 'Done' or LastModified > '2018-06-18 20:51:26Z' |
Alle tagwaarden zijn tekenreeksen en de ondersteunde binaire relationele operatoren gebruiken een lexicografische sortering van de tagwaarden. Ter ondersteuning van niet-tekenreeksgegevenstypen, inclusief getallen en datums, moeten de juiste opvulling en sorteerbare opmaak worden gebruikt. Tagwaarden moeten tussen enkele aanhalingstekens worden geplaatst.
Als tagnamen normale SQL-id's zijn, kunnen ze aanwezig zijn zonder escape; als ze speciale tekens bevatten, moeten ze worden gescheiden door dubbele aanhalingstekens (bijvoorbeeld 'TagName' = 'TagValue').
Expressies kunnen vergelijkingen voor meerdere tagnamen en -waarden bevatten. Haakjes ((
en )
) kunnen worden gebruikt om logische expressies te groepeert en de canonieke volgorde van de bewerking te bepalen. Een TagsPredicate
kan maximaal tien (10) logische bewerkingen bevatten.
De opslagservice weigert elke aanvraag die een ongeldige expressie met foutcode 400 (ongeldige aanvraag) bevat.