Put Page
Der Put Page
-Vorgang schreibt einen Bereich von Seiten in ein Seitenblob.
Anforderung
Sie können die Put Page
Anforderung wie folgt erstellen. Es wird empfohlen, HTTPS zu verwenden. Ersetzen Sie myaccount durch den Namen Ihres Speicherkontos:
PUT-Methodenanforderungs-URI | HTTP-Version |
---|---|
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page |
HTTP/1.1 |
Emulierte Speicherdienstanforderung
Wenn Sie eine Anforderung für den emulierten Speicherdienst stellen, geben Sie den Hostnamen des Emulators und den Blobdienstport als 127.0.0.1:10000
an, gefolgt vom Namen des emulierten Speicherkontos:
PUT-Methodenanforderungs-URI | HTTP-Version |
---|---|
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=page |
HTTP/1.1 |
Weitere Informationen finden Sie unter Verwenden des Azurite-Emulators für lokale Azure Storage-Entwicklung.
URI-Parameter
Sie können im Anforderungs-URI die folgenden zusätzlichen Parameter angeben:
Parameter | BESCHREIBUNG |
---|---|
timeout |
Optional. Der timeout -Parameter wird in Sekunden angegeben. Weitere Informationen finden Sie unter Festlegen von Timeouts für Blobdienstvorgänge. |
Anforderungsheader
Die erforderlichen und optionalen Anforderungsheader werden in der folgenden Tabelle beschrieben:
Anforderungsheader | BESCHREIBUNG |
---|---|
Authorization |
Erforderlich. Gibt das Autorisierungsschema, den Kontonamen und die Signatur an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage. |
Date oder x-ms-date |
Erforderlich. Gibt die koordinierte Weltzeit (Coordinated Universal Time, UTC) für die Anforderung an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage. |
x-ms-version |
Erforderlich für alle autorisierten Anforderungen. Gibt die Version des für die Anforderung zu verwendenden Vorgangs an. Weitere Informationen finden Sie unter Versionsverwaltung für die Azure-Speicherdienste. |
Range |
Entweder Range oder x-ms-range ist erforderlich.Gibt den Bereich von Bytes an, der als Seite geschrieben werden soll. Sowohl der Anfang als auch das Ende des Bereichs müssen angegeben werden. Dieser Header wird durch die HTTP/1.1-Protokollspezifikation definiert. Bei einem Seitenaktualisierungsvorgang kann der Seitenbereich bis zu 4 MiB sein. Bei einem Vorgang zum Löschen von Seiten kann der Seitenbereich so groß sein wie der Wert der vollständigen Größe des Blobs. Da Seiten an 512-Byte-Grenzen ausgerichtet werden müssen, muss der Startoffset ein Modul von 512 und der Endoffset ein Modul von 512 –1 sein. Beispiele für gültige Bytebereiche sind 0-511, 512-1023 usw. Blob Storage akzeptiert nur einen einzelnen Bytebereich für den Range Header, und der Bytebereich muss im folgenden Format angegeben werden: bytes=startByte-endByte .Wenn Range und x-ms-range angegeben werden, verwendet der Dienst den Wert x-ms-range . Weitere Informationen finden Sie unter Angeben des Bereichsheaders für Blobdienstvorgänge. |
x-ms-range |
Entweder Range oder x-ms-range ist erforderlich.Gibt den Bereich von Bytes an, der als Seite geschrieben werden soll. Sowohl der Anfang als auch das Ende des Bereichs müssen angegeben werden. Dieser Header wird durch die HTTP/1.1-Protokollspezifikation definiert. Bei einem Seitenaktualisierungsvorgang kann der Seitenbereich bis zu 4 MiB groß sein. Für einen Seitenlöschvorgang kann die Größe des Seitenbereichs dem Wert der Gesamtgröße des BLOB entsprechen. Da Seiten an 512-Byte-Grenzen ausgerichtet werden müssen, muss der Startoffset ein Modul von 512 und der Endoffset ein Modul von 512 – 1 sein. Beispiele für gültige Bytebereiche sind 0-511, 512-1023 usw. Blob Storage akzeptiert nur einen einzelnen Bytebereich für den x-ms-range Header, und der Bytebereich muss im folgenden Format angegeben werden: bytes=startByte-endByte .Wenn Range und x-ms-range angegeben werden, verwendet der Dienst den Wert x-ms-range . Weitere Informationen finden Sie unter Angeben des Bereichsheaders für Blobdienstvorgänge . |
Content-Length |
Erforderlich. Gibt die Anzahl der Bytes an, die im Anforderungstext übertragen werden. Wenn der x-ms-page-write Header auf clear festgelegt ist, muss der Wert dieses Headers auf 0 festgelegt werden. |
Content-MD5 |
Optional. Ein MD5-Hash des Seiteninhalts. Mithilfe des Hash wird die Integrität der Seite während der Übertragung überprüft. Bei Angabe dieses Headers vergleicht der Speicherdienst den Hash des eingegangenen Inhalts mit diesem Headerwert. <br / >Hinweis: Dieser MD5-Hash wird nicht mit dem Blob gespeichert. Wenn die beiden Hashs nicht übereinstimmen, schlägt der Vorgang mit Fehlercode 400 (Ungültige Anforderung) fehl. |
x-ms-content-crc64 |
Optional. Ein CRC64-Hash des Seiteninhalts. Mithilfe des Hash wird die Integrität der Seite während der Übertragung überprüft. Bei Angabe dieses Headers vergleicht der Speicherdienst den Hash des eingegangenen Inhalts mit diesem Headerwert. Hinweis: Dieser CRC64-Hash wird nicht mit dem Blob gespeichert. Wenn die beiden Hashs nicht übereinstimmen, schlägt der Vorgang mit Fehlercode 400 (Ungültige Anforderung) fehl. Wenn sowohl die Content-MD5 Header als x-ms-content-crc64 auch vorhanden sind, schlägt die Anforderung mit einer 400 (Ungültige Anforderung) fehl.Dieser Header wird ab Version 2019-02-02 unterstützt. |
x-ms-page-write: {update ¦ clear} |
Erforderlich. Sie können eine der folgenden Optionen angeben: - Update : Schreibt die vom Anforderungstext angegebenen Bytes in den angegebenen Bereich. Der Range -Header und der Content-Length -Header müssen übereinstimmen, damit das Update ausgeführt werden kann.- Clear : Löscht den angegebenen Bereich und gibt den Speicherplatz frei, der im Speicher für diesen Bereich verwendet wird. Um einen Bereich zu löschen, legen Sie den Content-Length Header auf 0 fest, und legen Sie den Range Header auf einen Wert fest, der den zu löschenden Bereich bis zur maximalen Blobgröße angibt. |
x-ms-encryption-scope |
Optional. Gibt den Verschlüsselungsbereich an, der zum Verschlüsseln des Anforderungsinhalts verwendet werden soll. Dieser Header wird ab Version 2019-02-02 unterstützt. |
x-ms-lease-id:<ID> |
Erforderlich, wenn das BLOB über eine aktive Lease verfügt. Um diesen Vorgang für ein BLOB mit einer aktiven Lease auszuführen, geben Sie die gültige Lease-ID für diesen Header an. |
x-ms-if-sequence-number-le: <num> |
Optional. Wenn die Sequenznummer des Blobs kleiner oder gleich dem angegebenen Wert ist, wird die Anforderung fortgesetzt. Andernfalls schlägt der Fehler SequenceNumberConditionNotMet (HTTP status Code 412 – Vorbedingung fehlgeschlagen) fehl. |
x-ms-if-sequence-number-lt: <num> |
Optional. Wenn die Sequenznummer des Blobs kleiner als der angegebene Wert ist, wird die Anforderung fortgesetzt. Andernfalls schlägt der Fehler SequenceNumberConditionNotMet (HTTP status Code 412 – Vorbedingung fehlgeschlagen) fehl. |
x-ms-if-sequence-number-eq: <num> |
Optional. Wenn die Sequenznummer des Blobs dem angegebenen Wert entspricht, wird die Anforderung fortgesetzt. Andernfalls schlägt der Fehler SequenceNumberConditionNotMet (HTTP status Code 412 – Vorbedingung fehlgeschlagen) fehl. |
If-Modified-Since |
Optional. Ein DateTime -Wert. Geben Sie diesen bedingten Header an, um die Seite nur dann zu schreiben, wenn das BLOB seit dem angegebenen Datum bzw. der angegebenen Uhrzeit geändert wurde. Wenn das Blob nicht geändert wurde, gibt Blob Storage status Code 412 (Fehler bei der Vorbedingung) zurück. |
If-Unmodified-Since |
Optional. Ein DateTime -Wert. Geben Sie diesen bedingten Header an, um die Seite nur zu schreiben, wenn das Blob seit dem angegebenen Datum/der angegebenen Uhrzeit nicht geändert wurde. Wenn das Blob geändert wurde, gibt Blob Storage status Code 412 (Vorbedingung fehlgeschlagen) zurück. |
If-Match |
Optional. Ein ETag-Wert. Geben Sie einen ETag-Wert für diesen bedingten Header an, um die Seite nur dann zu schreiben, wenn der ETag-Wert des BLOB dem angegebenen Wert entspricht. Wenn die Werte nicht übereinstimmen, gibt Blob Storage status Code 412 (Vorbedingung fehlgeschlagen) zurück. |
If-None-Match |
Optional. Ein ETag-Wert. Geben Sie einen ETag-Wert für diesen bedingten Header an, um die Seite nur zu schreiben, wenn der ETag-Wert des Blobs nicht mit dem angegebenen Wert übereinstimmt. Wenn die Werte identisch sind, gibt Blob Storage status Code 412 (Vorbedingung fehlgeschlagen) zurück. |
x-ms-client-request-id |
Optional. Stellt einen vom Client generierten, undurchsichtigen Wert mit einem Zeichenlimit von 1 Kibibyte (KiB) bereit, der beim Konfigurieren der Protokollierung in den Protokollen aufgezeichnet wird. Es wird dringend empfohlen, diesen Header zu verwenden, um clientseitige Aktivitäten mit Anforderungen zu korrelieren, die der Server empfängt. Weitere Informationen finden Sie unter Überwachen Azure Blob Storage. |
Dieser Vorgang unterstützt zudem die Verwendung von bedingten Headern zum Ausführen des Vorgangs, wobei eine bestimmte Bedingung erfüllt sein muss. Weitere Informationen finden Sie unter Angeben von bedingten Headern für Blobdienstvorgänge.
Anforderungsheader (vom Kunden bereitgestellte Verschlüsselungsschlüssel)
Ab Version 2019-02-02 können Sie die folgenden Header für die Anforderung angeben, ein Blob mit einem vom Kunden bereitgestellten Schlüssel zu verschlüsseln. Die Verschlüsselung mit einem vom Kunden bereitgestellten Schlüssel (und der entsprechenden Gruppe von Headern) ist optional.
Anforderungsheader | BESCHREIBUNG |
---|---|
x-ms-encryption-key |
Erforderlich. Der Base64-codierte AES-256-Verschlüsselungsschlüssel. |
x-ms-encryption-key-sha256 |
Erforderlich. Der Base64-codierte SHA256-Hash des Verschlüsselungsschlüssels. |
x-ms-encryption-algorithm: AES256 |
Erforderlich. Gibt den Algorithmus an, der für die Verschlüsselung verwendet werden soll. Der Wert dieses Headers muss auf AES256 festgelegt sein. |
Anforderungstext
Der Anforderungstext enthält den Inhalt der Seite.
Beispielanforderung: Bytebereich aktualisieren
Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1
Request Headers:
x-ms-page-write: update
x-ms-date: Fri, 16 Sep 2011 22:15:50 GMT
x-ms-version: 2011-08-18
x-ms-range: bytes=0-65535
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=
Content-Length: 65536
Beispielanforderung: Bytebereich löschen
Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1
Request Headers:
Range: bytes=1024-2048
x-ms-page-write: clear
x-ms-date: Sun, 25 Sep 2011 23:37:35 GMT
x-ms-version: 2011-08-18
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=
Antwort
Die Antwort enthält den HTTP-Statuscode und einen Satz von Antwortheadern.
Statuscode
Bei einem erfolgreichen Vorgang wird der Statuscode 201 (Erstellt) zurückgegeben.
Weitere Informationen zu status Codes finden Sie unter Status- und Fehlercodes.
Antwortheader
Die Antwort für diesen Vorgang umfasst die folgenden Header. Die Antwort kann außerdem weitere HTTP-Standardheader enthalten. Alle Standardheader entsprechen der HTTP/1.1-Protokollspezifikation.
Syntax | BESCHREIBUNG |
---|---|
ETag |
Das ETag für das BLOB. Wenn die Anforderungsversion 2011-08-18 und höher ist, wird der ETag-Wert in Anführungszeichen eingeschlossen. Das ETag kann verwendet werden, um einen bedingten Put Page -Vorgang auszuführen, indem sein Wert für den If-Match -Anforderungsheader oder den If-None-Match -Anforderungsheader angegeben wird. |
Last-Modified |
Das Datum und die Uhrzeit der letzten Änderung des Blobs. Das Datumsformat entspricht RFC 1123. Weitere Informationen finden Sie unter Darstellen von Datums-/Uhrzeitwerten in Headern. Bei jedem Schreibvorgang für das BLOB, einschließlich von Updates der Metadaten oder Eigenschaften des BLOB oder Eigenschaften, wird der Zeitpunkt der letzten Änderung des BLOB geändert. |
Content-MD5 |
Dieser Header wird zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird von Blob Storage berechnet. Er entspricht nicht unbedingt dem Wert, der in den Anforderungsheadern angegeben wird. Ab Version 2019-02-02 wird dieser Header nur zurückgegeben, wenn die Anforderung über diesen Header verfügt. |
x-ms-content-crc64 |
Ab Version 2019-02-02 wird dieser Header zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird von Blob Storage berechnet. Er entspricht nicht unbedingt dem Wert, der in den Anforderungsheadern angegeben wird. Dieser Header wird zurückgegeben, wenn Content-MD5 der Header in der Anforderung nicht vorhanden ist. |
x-ms-blob-sequence-number |
Die aktuelle Sequenznummer für das Seitenblob. |
x-ms-request-id |
Identifiziert eindeutig die Anforderung, die gestellt wurde, und kann zur Problembehandlung für die Anforderung verwendet werden. Weitere Informationen finden Sie unter Problembehandlung bei API-Vorgängen. |
x-ms-version |
Gibt die Blobdienstversion an, die zum Ausführen der Anforderung verwendet wurde. Dieser Header wird für Anforderungen zurückgegeben, die für Version 2009-09-19 und höher vorgenommen wurden. |
Date |
Ein UTC-Datums-/Uhrzeitwert, der vom Dienst generiert wird, der die Uhrzeit angibt, zu der die Antwort initiiert wurde. |
x-ms-request-server-encrypted: true/false |
Version 2015-12-11 und höher. Der Wert dieses Headers wird auf true festgelegt, wenn der Inhalt der Anforderung mithilfe des angegebenen Algorithmus erfolgreich verschlüsselt wurde. Andernfalls wird der Wert auf false festgelegt. |
x-ms-encryption-key-sha256 |
Version 2019-02-02 und höher. Wird zurückgegeben, wenn die Anforderung einen vom Kunden bereitgestellten Schlüssel für die Verschlüsselung verwendet hat, sodass der Client sicherstellen kann, dass der Inhalt der Anforderung mithilfe des bereitgestellten Schlüssels erfolgreich verschlüsselt wurde. |
x-ms-encryption-scope |
Version 2019-02-02 und höher. Wird zurückgegeben, wenn die Anforderung einen Verschlüsselungsbereich verwendet hat, sodass der Client sicherstellen kann, dass der Inhalt der Anforderung mithilfe des Verschlüsselungsbereichs erfolgreich verschlüsselt wurde. |
x-ms-client-request-id |
Kann verwendet werden, um Anforderungen und entsprechende Antworten zu behandeln. Der Wert dieses Headers ist gleich dem Wert des x-ms-client-request-id Headers, wenn er in der Anforderung vorhanden ist und der Wert nicht mehr als 1.024 sichtbare ASCII-Zeichen enthält. Wenn der x-ms-client-request-id Header in der Anforderung nicht vorhanden ist, ist er in der Antwort nicht vorhanden. |
Antworttext
Keine.
Beispiel für eine Antwort
Response Status:
HTTP/1.1 201 Created
Response Headers:
x-ms-content-crc64: 77uWZTolTHU
Date: Sun, 25 Sep 2011 22:33:35 GMT
ETag: "0x8CB171BA9E94B0B"
Last-Modified: Sun, 25 Sep 2011 12:13:31 GMT
x-ms-version: 2011-08-18
x-ms-blob-sequence-number: 0
Content-Length: 0
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
Authorization
Beim Aufrufen eines Datenzugriffsvorgangs in Azure Storage ist eine Autorisierung erforderlich. Sie können den Put Page
Vorgang wie unten beschrieben autorisieren.
Wichtig
Microsoft empfiehlt die Verwendung Microsoft Entra ID mit verwalteten Identitäten, um Anforderungen an Azure Storage zu autorisieren. Microsoft Entra ID bietet im Vergleich zur Autorisierung mit gemeinsam genutzten Schlüsseln überlegene Sicherheit und Benutzerfreundlichkeit.
Azure Storage unterstützt die Verwendung von Microsoft Entra ID zum Autorisieren von Anforderungen an Blobdaten. Mit Microsoft Entra ID können Sie die rollenbasierte Zugriffssteuerung (Azure RBAC) von Azure verwenden, um einem Sicherheitsprinzipal Berechtigungen zu erteilen. Der Sicherheitsprinzipal kann ein Benutzer, eine Gruppe, ein Anwendungsdienstprinzipal oder eine verwaltete Azure-Identität sein. Der Sicherheitsprinzipal wird von Microsoft Entra ID authentifiziert, um ein OAuth 2.0-Token zurückzugeben. Das Token kann anschließend zum Autorisieren einer Anforderung an den Blob-Dienst verwendet werden.
Weitere Informationen zur Autorisierung mit Microsoft Entra ID finden Sie unter Autorisieren des Zugriffs auf Blobs mit Microsoft Entra ID.
Berechtigungen
Nachfolgend sind die RBAC-Aktion aufgeführt, die für einen Microsoft Entra Benutzer, Gruppe, verwaltete Identität oder Dienstprinzipal erforderlich ist, um den Put Page
Vorgang aufzurufen, und die integrierte Azure RBAC-Rolle mit den geringsten Berechtigungen, die diese Aktion enthält:
- Azure RBAC-Aktion:Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
- Integrierte Rolle mit den geringsten Berechtigungen:Mitwirkender für Speicherblobdaten
Weitere Informationen zum Zuweisen von Rollen mithilfe von Azure RBAC finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten.
Hinweise
Der Put Page
-Vorgang schreibt einen Bereich von Seiten in ein Seitenblob. Dieser Vorgang kann nur für ein vorhandenes Seitenblob aufgerufen werden. Es kann nicht aufgerufen werden, um ein neues Seitenblob zu erstellen, und es kann auch nicht für ein Blockblob aufgerufen werden. Das Aufrufen Put Page
mit einem derzeit nicht vorhandenen Blobnamen gibt HTTP-status Code 404 (Nicht gefunden) zurück.
Um ein neues Seitenblob zu erstellen, rufen Sie Put Blob auf, und geben Sie den Typ des Blobs an, der als Seitenblob erstellt werden soll. Ein Seitenblob kann bis zu 8 TiB groß sein.
Wenn das Blob über eine aktive Lease verfügt, muss der Client eine gültige Lease-ID für die Anforderung zum Schreiben einer Seite angeben.
Seitenaktualisierungsvorgänge
Wenn Put Page
mit der Option Update
aufgerufen wird, wird ein direkter Schreibvorgang in das angegebene Seitenblob ausgeführt. Sämtlicher Inhalt der angegebenen Seite wird durch das Update überschrieben.
Wichtig
Wenn für den Server ein Timeout auftritt oder ihre Verbindung während eines Vorgangs Put Page
geschlossen wird, wurde die Seite möglicherweise aktualisiert oder nicht. Daher sollten Sie das Update wiederholen, bis Sie eine Antwort erhalten, die den Erfolg anzeigt.
Jeder Seitenbereich, mit dem für einen Aktualisierungsvorgang übermittelt Put Page
wird, kann bis zu 4 MiB groß sein. Der Start- und Endbereich der Seite muss an 512-Bytes-Begrenzungen ausgerichtet werden. Wenn Sie versuchen, einen Seitenbereich hochzuladen, der größer als 4 MiB ist, gibt der Dienst status Code 413 (Request Entity Too Large) zurück.
Vorgänge zum Löschen von Seiten
Das Aufrufen Put Page
mit der Clear
Option gibt den Speicherplatz frei, der von der angegebenen Seite verwendet wird. Seiten, die gelöscht wurden, werden nicht mehr als Teil des Seitenblobs nachverfolgt.
Seiten, die gelöscht wurden, fallen keine Gebühren mehr für das Speicherkonto an, da ihre Speicherressourcen freigegeben wurden. Die einzige Ausnahme ist, wenn Momentaufnahmen des Seitenblobs vorhanden sind. Für Seiten in Momentaufnahmen fallen Gebühren an, wenn diese Seiten nicht mehr als Teil des Quellblobs vorhanden sind.
Verwalten von Parallelitätsproblemen
Blob Storage verarbeitet gleichzeitige Schreibvorgänge auf überlappende Seiten sequenziell. Das heißt, die letzte Seite, die vom Dienst verarbeitet wird, bestimmt den Inhalt des Blobs. Um die Integrität des Blobinhalts sicherzustellen, sollte der Client Daher Schreibvorgänge auf überlappende Seiten mithilfe eines oder mehrerer der folgenden Ansätze verarbeiten:
Sie können den Wert des
Last-Modified
-Antwortheaders für jeden erfolgreichen Aufruf vonPut Page
überprüfen. Die Reihenfolge der von Blob Storage zurückgegebenen Antworten entspricht nicht unbedingt der Reihenfolge, in der sie vom Dienst ausgeführt wurden. Der Wert vonLast-Modified
gibt jedoch immer die Reihenfolge an, in der die Anforderungen vom Dienst verarbeitet wurden.Sie können Updates bedingt auf der Grundlage des ETags des BLOB oder des letzten Änderungszeitpunkts mit vollständiger Parallelität ausführen. Dieser Ansatz empfiehlt sich insbesondere dann, wenn die Anzahl gleichzeitiger Schreibvorgänge relativ gering ist. Verwenden Sie zu diesem Zweck die bedingten Anforderungsheader
If-Match
,If-None-Match
,If-Modified-Since
undIf-Unmodified-Since
.Sie können Lease-Blob aufrufen, um das Blob für andere Schreibvorgänge für einen Zeitraum von einer Minute oder länger zu sperren, wenn die Lease erneuert wird.
Sie können die Sequenznummer des Blobs verwenden, um sicherzustellen, dass das Wiederholen einer Anforderung, für die keine Antwort vorliegt, nicht zu gleichzeitigen Updates führt. Dieser Ansatz eignet sich möglicherweise am besten für Clients, die einen hohen Durchsatz für Seitenschreibvorgänge erfordern. Dies wird im folgenden Abschnitt ausführlich beschrieben.
Verwenden der Seitenblobsequenznummer zum Wiederholen von Anforderungen
Wenn ein Aufruf für ein Put Page
Zeitüberschreitungs- oder keine Antwort zurückgibt, gibt es keine Möglichkeit, sicher zu wissen, ob die Anforderung erfolgreich war. Daher müssen Sie die Anforderung erneut ausführen. Aufgrund der verteilten Art der Azure-Speicherdienste ist es jedoch möglich, dass die ursprüngliche Anforderung verarbeitet wird, nachdem die wiederholte Anforderung erfolgreich war. Die verzögerte ursprüngliche Anforderung kann andere Updates überschreiben und somit zu unerwarteten Ergebnissen führen. Die folgende Sequenz veranschaulicht, wie dies geschehen kann:
Eine
Put Page
Anforderung zum Schreiben des Werts "X" in Seite 0 ist ein Zeitüberschreitungsüberschreitung oder gibt keine Antwort zurück.Eine wiederholte Anforderung zum Schreiben von Wert "X" in Seite 0 wird erfolgreich abgeschlossen.
Eine Anforderung zum Schreiben von Wert "Y" in Seite 0 wird erfolgreich abgeschlossen.
Die ursprüngliche Anforderung war erfolgreich, und Wert "x" wird in Seite 0 geschrieben.
Beim Lesen von Seite 0 wird Wert "X" zurückgegeben, während der Client an diesem Punkt Wert "Y" erwartet.
Diese Art von Konflikt kann auftreten, wenn die ursprüngliche Anforderung keinen status Code von 100 bis 499 oder 503 (Server ist ausgelastet) zurückgibt. Wird einer dieser Statuscodes zurückgegeben, können Sie sicher sein, dass die Anforderung erfolgreich abgeschlossen wurde oder fehlgeschlagen ist. Wenn der Dienst jedoch einen Statuscode außerhalb dieses Bereichs zurückgibt, kann der Status der ursprünglichen Anforderung nicht bestimmt werden.
Um diese Art von Konflikt zu verhindern, können Sie die Sequenznummer des Seitenblobs verwenden, um sicherzustellen, dass die ursprüngliche Anforderung nicht erfolgreich ist, wenn Sie eine Anforderung wiederholen. Dazu sollten Sie die Sequenznummer vor dem Wiederholen der ursprünglichen Anforderung inkrementieren. Sie können dann die Header für bedingte Sequenznummern verwenden, um sicherzustellen, dass die Anforderung fehlschlägt, wenn ihre Sequenznummer nicht mit der erwarteten Sequenznummer übereinstimmt. Die folgende Sequenz veranschaulicht diese Vorgehensweise:
Der Client erstellt ein Seitenblob mit Put Blob und legt seine Sequenznummer auf fest
0
.Eine
Put Page
Anforderung zum Schreiben des Werts "X" in Seite 0, wobei derif-sequence-number-lt
Header auf1
Zeitüberschreitung festgelegt ist oder keine Antwort zurückgibt.Der Client ruft auf
Set Blob Properties
, um die Sequenznummer auf zu1
aktualisieren.Eine wiederholte Anforderung zum Schreiben des Werts "X" auf Seite 0, wobei
if-sequence-number-lt
der Wert auf "erfolgreich" festgelegt2
ist.Eine Anforderung, den Wert "Y" auf Seite 0 zu schreiben, wobei
if-sequence-number-lt
der Wert auf "erfolgreich" festgelegt2
ist.Die ursprüngliche Anforderung wird schließlich verarbeitet, schlägt jedoch fehl, da sie die Bedingung angibt, dass die Sequenznummer kleiner als 1 sein muss (d. a. der
if-sequence-num-lt
Header ist auf1
festgelegt). Als Fehler wird SequenceNumberConditionNotMet (HTTP-Statuscode 412 - Vorbedingung nicht erfüllt) zurückgegeben.Beim Lesen von Seite 0 wird der erwartete Wert "Y" zurückgegeben.
Weitere Informationen
Autorisieren von Anforderungen an Azure Storage
Status- und Fehlercodes
Festlegen von Timeouts für Blobdienstvorgänge