Angeben von bedingten Headern für Blobdienstvorgänge

Einige Vorgänge des Blob-Diensts unterstützen die Verwendung von bedingten Headern. Sie können mit bedingten Headern festlegen, dass ein Vorgang nur ausgeführt wird, wenn eine angegebene Bedingung erfüllt wurde.

Der Blobdienst folgt der HTTP/1.1-Protokollspezifikation für bedingte Header.

Unterstützte bedingte Header

Die unterstützten bedingten Header werden in der folgenden Tabelle beschrieben.

Bedingter Header BESCHREIBUNG
If-Modified-Since Ein DateTime-Wert. Das Datumsformat entspricht RFC 1123. Weitere Informationen finden Sie unter Darstellung von Datums-/Uhrzeitwerten in Headern. Mit diesem Header legen Sie fest, dass der Vorgang nur ausgeführt wird, wenn die Ressource seit der angegebenen Zeit geändert wurde.
If-Unmodified-Since Ein DateTime-Wert. Das Datumsformat entspricht RFC 1123. Weitere Informationen finden Sie unter Darstellung von Datums-/Uhrzeitwerten in Headern. Mit diesem Header legen Sie fest, dass der Vorgang nur ausgeführt wird, wenn die Ressource seit dem angegebenen Datum/der angegebenen Uhrzeit nicht geändert wurde.
If-Match Ein ETag-Wert. Mit diesem Header legen Sie fest, dass der Vorgang nur ausgeführt wird, wenn das ETag der Ressource mit dem angegebenen Wert übereinstimmt. In Version 2011-08-18 und höher kann das ETag in Anführungszeichen angegeben werden.
If-None-Match Ein ETag-Wert oder das Platzhalterzeichen (*). Mit diesem Header legen Sie fest, dass der Vorgang nur ausgeführt wird, wenn das ETag der Ressource nicht mit dem angegebenen Wert übereinstimmt. In Version 2011-08-18 und höher kann das ETag in Anführungszeichen angegeben werden.

Mit dem Platzhalterzeichen (*) legen Sie fest, dass der Vorgang nur ausgeführt wird, wenn die Ressource nicht vorhanden ist, und fehlschlägt, wenn die Ressource vorhanden ist.

Festlegen bedingter Header für Blob-Dienst-Lesevorgänge in Version in 2013-08-15 oder höher

Ab Version 2013-08-15 unterstützen die Vorgänge Blob abrufen und Blobeigenschaften abrufen mehrere bedingte Header. Sie können eine beliebige Kombination unterstützter bedingter Header angeben. Der Blob-Dienst wertet diese Bedingungen gemäß dem folgenden Ausdruck aus:

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

Sie können mehrere durch Trennzeichen getrennte Werte für If-Match und If-None-Match angeben. Wenn Sie mehrere Werte für If-Match angeben, führt der Blob-Dienst vor der Auswertung des gesamten Ausdrucks einen logischen OR-Vorgang für alle bereitgestellten Werte aus. Wenn Sie mehrere Werte für if-None-Match angeben, führt der Dienst vor der Auswertung des gesamten Ausdrucks einen logischen AND-Vorgang aus. Das Festlegen mehrerer Werte für If-Modified-Since und If-Unmodified-Since wird nicht unterstützt und führt zur Ausgabe von Fehlercode 400 (Bad Request).

Dieses Feature ist aktiviert, um die HTTP/1.1-Spezifikation zu erfüllen und szenarien zu unterstützen, in denen ein CDN (Content Delivery Network) oder Proxyserver einer Inflightanforderung zusätzliche bedingte Header hinzufügt. Im Folgenden finden Sie einige Beispiele dafür, wie bedingte Header kombiniert werden können.

Beispiel 1:

Erwägen Sie eine Anforderung zum Abrufen von Blobs , die die If-Match Header und If-Modified-Since enthält. Der folgenden Tabelle können Sie den Statuscode entnehmen, der abhängig davon zurückgegeben wird, ob die Header einzeln oder in Kombination ausgewertet werden.

Bedingte Header Ergebnis der Einzelauswertung Ergebnis der kombinierten Auswertung
If-Match 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Match 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 304 (Nicht geändert) 412 (Vorbedingung nicht erfüllt)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 304 (Nicht geändert)
If-Modified-Since 304 (Nicht geändert) 304 (Nicht geändert)

Beispiel 2:

Es wird eine Anforderung verwendet, die den If-None-Match-Header und den If-Modified-Since-Header enthält.

Bedingte Header Ergebnis der Einzelauswertung Ergebnis der kombinierten Auswertung
If-None-Match 304 (Nicht geändert) 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 (Nicht geändert) 200 (OK)
If-None-Match 304 (Nicht geändert) 304 (Nicht geändert)
If-Modified-Since 304 (Nicht geändert) 304 (Nicht geändert)

Beispiel 3:

Es wird eine Anforderung verwendet, die den If-Modified-Since, If-Match-Header und den If-Unmodified-Since-Header umfasst.

Bedingte Header Ergebnis der Einzelauswertung Ergebnis der kombinierten Auswertung
If-Modified-Since 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Match 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Unmodified-Since 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Match 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Unmodified-Since 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 304 (Nicht geändert) 412 (Vorbedingung nicht erfüllt)
If-Match 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Unmodified-Since 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 304 (Nicht geändert) 304 (Nicht geändert)
If-Match 200 (OK) 304 (Nicht geändert)
If-Unmodified-Since 200 (OK) 304 (Nicht geändert)

Beispiel 4:

Es wird eine Anforderung verwendet, die die Header If-Modified-Since, If-None-Match, If-Unmodified-Since und If-Match umfasst.

Kombination Einzelner HTTP-Statuscode Abgerufener BLOB-Status
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 (Vorbedingung nicht erfüllt)
If-None-Match 304 (Nicht geändert) 412 (Vorbedingung nicht erfüllt)
If-Unmodified-Since 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Match 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 304 (Nicht geändert) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (Nicht geändert) 412 (Vorbedingung nicht erfüllt)
If-None-Match 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Unmodified-Since 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Match 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 304 (Nicht geändert) 412 (Vorbedingung nicht erfüllt)
If-None-Match 200 (OK) 412 (Vorbedingung nicht erfüllt)
If-Unmodified-Since 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Match 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Modified-Since 304 (Nicht geändert) 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 (Nicht geändert) 412 (Vorbedingung nicht erfüllt)
If-None-Match 304 (Nicht geändert) 412 (Vorbedingung nicht erfüllt)
If-Unmodified-Since 412 (Vorbedingung nicht erfüllt) 412 (Vorbedingung nicht erfüllt)
If-Match 200 (OK) 412 (Vorbedingung nicht erfüllt)

Festlegen bedingter Header für Lesevorgänge in Versionen vor 2013-08-15 und für Schreibvorgänge (alle Versionen)

Beachten Sie beim Aufrufen von Blob-Dienst-Lesevorgängen (Blob abrufen und Blobeigenschaften abrufen) mit Versionen vor 2013-08-15 und beim Aufrufen von Schreibvorgängen unabhängig von der Version Folgendes:

  • Wenn in einer Anforderung sowohl der If-None-Match-Header als auch der If-Modified-Since-Header angegeben sind, wird die Anforderung auf Grundlage der in If-None-Match angegebenen Kriterien ausgewertet.

  • Wenn in einer Anforderung sowohl der If-Match-Header als auch der If-Unmodified-Since-Header angegeben sind, wird die Anforderung auf Grundlage der in If-Match angegebenen Kriterien ausgewertet.

  • Mit Ausnahme der beiden oben angegebenen Kombinationen bedingter Header darf in einer Anforderung nur ein einzelner bedingter Header angegeben werden. Wenn mehrere bedingte Header angegeben werden, wird der Statuscode 400 (Bad Request) zurückgegeben.

  • Wenn eine Antwort ein ETag enthält, überprüfen Sie vor dem Verarbeiten des ETags die Version der Anforderung und Antwort. Beispielsweise wird in Version 2011-08-18 und höher ein ETag in Anführungszeichen zurückgegeben, in älteren Versionen jedoch nicht. Stellen Sie vor dem Auswerten des ETags sicher, dass die Anwendung beide ETag-Formate verarbeiten kann.

  • RFC 2616 lässt mehrere ETag-Werte in einem einzelnen Header zu, aber Anforderungen an den Blob-Dienst können nur einen ETag-Wert enthalten. Wenn mehrere ETag-Werte angegeben werden, wird der Statuscode 400 (Bad Request) erzeugt.

Vorgänge, die bedingte Header unterstützen

In der folgenden Tabelle sind die Vorgänge beschrieben, die bedingte Header unterstützen.

REST-Vorgang Vorgangsart Unterstützte bedingte Header
Append Block

(Version 2015-02-21 und höher)
Schreiben If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Append Block From URL

(Version 2018-11-09 und höher)
Schreiben If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Copy Blob Lesen und Schreiben Für Bedingungen für den Ziel-BLOB:

- If Modified-Since

- If-Unmodified-Since

- If-Match

- If-None-Match

- x-ms-if-tags

Für Bedingungen für den Quell-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
Delete Blob Schreiben If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since
Get Blob Lesen If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Abrufen von Blobtags

(Version 2019-12-12 und höher)
Lesen x-ms-if-tags
Get Block List Lesen x-ms-if-tags
Get Page Ranges Lesen If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Lease Blob Schreiben If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since
Put Blob From URL Schreiben If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Für Bedingungen für den Quell-BLOB:

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Block From URL

(Version 2018-03-28 und höher)
Schreiben 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 Schreiben If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Page From URL

(Version 2018-11-09 und höher)
Schreiben If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since
Festlegen von Containermetadaten Schreiben If-Modified-Since
Festlegen von Blobtags

(Version 2019-12-12 und höher)
Schreiben x-ms-if-tags
Set Blob Tier Lese- oder Schreibvorgang x-ms-if-tags
Snapshot Blob Lesen If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Festlegen der Richtlinie für die Unveränderlichkeit von Blobs Schreiben If-Unmodified-Since

Bedingte Header werden in den folgenden Datenvorgängen des Blob-Diensts derzeit nicht unterstützt:

HTTP-Antwortcodes für Vorgänge, die bedingte Header unterstützen

Wenn die Anforderung einen bedingten Header enthält und die angeforderte Ressource die angegebene Bedingung nicht erfüllt, gibt der Blob-Dienst einen HTTP-Antwortcode zurück. Die zurückgegebenen Antwortcodes entsprechen der HTTP/1.1-Protokollspezifikation (RFC 2616).

Methoden in der Azure .NET-Clientbibliothek konvertieren diese Fehlerantwortcodes in ein StorageException-Objekt.

Lesevorgänge

In der folgenden Tabelle sind die Antwortcodes angegeben, die bei einem Lesevorgang für die einzelnen bedingten Header zurückgegeben werden, wenn eine Bedingung nicht erfüllt ist. In Lesevorgängen werden die Verben GET und HEAD verwendet.

Bedingter Header Antwortcode, wenn Bedingung nicht erfüllt wurde
If-Modified-Since Nicht geändert (304 (nicht geändert))
If-Unmodified-Since Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-Match Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-None-Match Nicht geändert (304 (nicht geändert))

Die Ergebnisse, die bei Verwendung mehrerer Header mit Version 2013-08-15 oder höher zurückgegebenen werden, können Sie den Beispielen oben entnehmen.

Schreibvorgänge

In der folgenden Tabelle sind die Antwortcodes angegeben, die bei einem Schreibvorgang für die einzelnen bedingten Header zurückgegeben werden, wenn eine Bedingung nicht erfüllt ist. In Schreibvorgängen werden die Verben PUT und DELETE verwendet.

Bedingter Header Antwortcode, wenn Bedingung nicht erfüllt wurde
If-Modified-Since Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-Unmodified-Since Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-Match Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-None-Match Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))

Kopiervorgänge

In der folgenden Tabelle sind die Antwortcodes angegeben, die bei einem Kopiervorgang für die einzelnen bedingten Header zurückgegeben werden, wenn eine Bedingung nicht erfüllt ist. Der Vorgang Blob kopieren verwendet die Verben PUT.

Bedingter Header Antwortcode, wenn Bedingung nicht erfüllt wurde
If-Modified-Since Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-Unmodified-Since Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-Match Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
If-None-Match Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
x-ms-source-if-modified-since Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
x-ms-source-if-unmodified-since Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
x-ms-source-if-match Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))
x-ms-source-if-none-match Vorbedingung nicht erfüllt (412) (Vorbedingung nicht erfüllt))

Tags Für bedingte Vorgänge

Zusätzlich zu den standardmäßigen HTTP-bedingten Headern, die vom Blobdienst unterstützt werden, unterstützen mehrere Vorgänge auch Bedingungen für die Tags in einer Blobressource.

Bedingter Header BESCHREIBUNG
x-ms-if-tags Version 2019-12-12 und höher. Ein TagsPredicate-Wert. Geben Sie diesen Header an, um den Vorgang nur auszuführen, wenn das Prädikat mit true den Tags des Blobs ausgewertet wird.
x-ms-source-if-tags Version 2019-12-12 und höher. Gilt nur für Das Kopieren von Blobs. Ein TagsPredicate-Wert. Geben Sie diesen Header an, um den Vorgang nur auszuführen, wenn das Prädikat mit true den Tags des Quellblobs ausgewertet wird.

Wenn der x-ms-if-tags bedingte Header oder x-ms-source-if-tags in einer Anforderung vorhanden ist und der TagsPredicate als falseausgewertet wird, gibt der Blobdienst den Fehlercode 412 (Vorbedingung fehlgeschlagen) für den Vorgang zurück.

Der Aufrufer muss über die Berechtigung zum Lesen der Tags in einem Blob verfügen, um die x-ms-if-tags bedingten Header oder x-ms-source-if-tags verwenden zu können.

Prädikatsyntax für Tags

Der Blob-Dienst unterstützt eine Teilmenge der ANSI SQL WHERE-Klauselgrammatik für den Wert des TagsPredicate Headers. Die folgenden Operatoren werden unterstützt:

Operator BESCHREIBUNG Beispiel
= Gleich Status = 'In Progress'
<> Ungleich Status <> 'Done'
> Größer als LastModified > '2018-06-18 20:51:26Z'
>= Größer als oder gleich Priority >= '05'
< Kleiner als Age < '032'
<= Kleiner als oder gleich Reviewer <= 'Smith'
AND Logisches AND Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR Logisches OR Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

Alle Tagwerte sind Zeichenfolgen, und die unterstützten binären relationalen Operatoren verwenden eine lexikografische Sortierung der Tagwerte. Um Datentypen ohne Zeichenfolgen zu unterstützen, einschließlich Zahlen und Datumsangaben, müssen geeignete Abstände und sortierbare Formatierungen verwendet werden. Tagwerte müssen in einfache Anführungszeichen eingeschlossen werden.

Wenn Tagnamen reguläre SQL-Bezeichner sind, können sie ohne Escapezeichen vorhanden sein. wenn sie Sonderzeichen enthalten, müssen sie durch doppelte Anführungszeichen (z. B. "TagName" = 'TagValue') getrennt werden.

Ausdrücke können Vergleiche für mehrere Tagnamen und -werte enthalten. Klammern (( und )) können verwendet werden, um logische Ausdrücke zu gruppieren und die kanonische Reihenfolge der Vorgänge zu steuern. Ein TagsPredicate kann höchstens zehn (10) logische Vorgänge umfassen.

Der Speicherdienst lehnt jede Anforderung ab, die einen ungültigen Ausdruck mit dem Fehlercode 400 (Ungültige Anforderung) enthält.

Weitere Informationen

Blobdienstkonzepte