Freigeben über


Put Page From URL

Der Put Page From URL Vorgang schreibt einen Bereich von Seiten in ein Seitenblob, in dem der Inhalt aus einer URL gelesen wird. Diese API ist ab Version 2018-11-09 verfügbar.

Anforderung

Sie können die Put Page From URL 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

URI des emulierten Speicherdiensts

Wenn Sie eine Anforderung für den emulierten Speicherdienst stellen, geben Sie den Hostnamen des Emulators und den Blobdienstport als 127.0.0.1:10000an, 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 groß sein.

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.

Der Blob-Dienst akzeptiert nur einen einzigen 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.

Der Seitenbereich kann bis zu 4 MiB groß sein.

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.

Der Blob-Dienst akzeptiert nur einen einzigen 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. Der Wert dieses Headers muss auf 0 festgelegt werden. Wenn die Länge nicht 0 ist, schlägt der Vorgang mit dem status Code 400 (Ungültige Anforderung) fehl.
x-ms-copy-source:name Erforderlich. Gibt die URL des Quellblobs an. Der Wert kann eine URL mit einer Länge von bis zu 2 KiB sein, die ein Blob angibt. Der Wert sollte so URL-codiert sein, wie er in einem Anforderungs-URI verwendet wird. Das Quellblob muss entweder öffentlich sein oder über eine Freigegebene Zugriffssignatur autorisiert werden. Wenn das Quellblob öffentlich ist, ist zum Ausführen des Vorgangs keine Autorisierung erforderlich. Hier sind einige Beispiele für Quellobjekt-URLs:

- https://myaccount.blob.core.windows.net/mycontainer/myblob
- https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
- https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=<DateTime>
x-ms-copy-source-authorization: <scheme> <signature> Optional. Gibt das Autorisierungsschema und die Signatur für die Kopierquelle an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage.
Nur ein Schematräger wird für Microsoft Entra unterstützt.
Dieser Header wird in Version 2020-10-02 und höher unterstützt.
x-ms-source-range Lädt die Bytes des Blobs in die Quell-URL im angegebenen Bereich hoch. Sowohl der Anfang als auch das Ende des Bereichs müssen angegeben werden. Dieser Header wird durch die HTTP/1.1-Protokollspezifikation definiert.

Der Seitenbereich kann bis zu 4 MiB groß sein.

Der Blob-Dienst akzeptiert nur einen einzigen Bytebereich für den x-ms-source-range-Header, und der Bytebereich muss im folgenden Format angegeben werden: bytes=startByte-endByte.

Weitere Informationen finden Sie unter Angeben des Bereichsheaders für Blobdienstvorgänge .
x-ms-source-content-md5 Optional. Ein MD5-Hash des Seiteninhalts aus dem URI. Dieser Hash wird verwendet, um die Integrität der Seite während des Transports der Daten aus dem URI zu überprüfen. Wenn dieser Header angegeben wird, vergleicht der Speicherdienst den Hash des Inhalts, der aus der Copy-Source-Quelle eingegangen ist, mit diesem Headerwert.

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-source-content-crc64 Optional. Ein CRC64-Hash des Seiteninhalts aus dem URI. Dieser Hash wird verwendet, um die Integrität der Seite während des Transports der Daten aus dem URI zu überprüfen. Wenn dieser Header angegeben wird, vergleicht der Speicherdienst den Hash des Inhalts, der aus der Copy-Source-Quelle eingegangen ist, 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 als x-ms-source-content-crc64 auch x-ms-source-content-md5 Header 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-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 fehl (HTTP-status Code 412 – Vorbedingungsfehler).
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 fehl (HTTP-status Code 412 – Vorbedingungsfehler).
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 der Blobdienst status Code 412 (Vorbedingung fehlgeschlagen) 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 der Blob-Dienst Statuscode 412 (Vorbedingung nicht erfüllt) 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 der Blobdienst 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. Bei übereinstimmenden Werten gibt der Blob-Dienst den Statuscode 412 (Vorbedingung nicht erfüllt) zurück.
x-ms-encryption-scope Optional. Gibt den Verschlüsselungsbereich an, der zum Verschlüsseln des Quellinhalts verwendet werden soll. Dieser Header wird in Version 2019-02-02 und höher unterstützt.
x-ms-client-request-id Optional. Stellt einen vom Client generierten, undurchsichtigen Wert mit einem Zeichenlimit von 1 Kibibyte (KiB) bereit, der in den Protokollen aufgezeichnet wird, wenn die Protokollierung konfiguriert ist. 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 die folgenden Header für die Anforderung zum Verschlüsseln eines Blobs angegeben werden, das mit einem vom Kunden bereitgestellten Schlüssel verschlüsselt wurde. Die Verschlüsselung mit einem vom Kunden bereitgestellten Schlüssel (und dem entsprechenden Satz 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.

Beispiel für eine Anforderung

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1  
  
Request Headers:   
x-ms-date: Fri, 16 Sep 2011 22:15:50 GMT  
x-ms-version: 2018-11-09  
x-ms-range: bytes=0-65535  
x-ms-copy-source: https://myaccount.blob.core.windows.net/mycontainer/myblob
x-ms-source-range: bytes=0-65535
Authorization: SharedKey myaccount:4KdWDiTdA9HmIF9+WF/8WfYOpUrFhieGIT7f0av+GEI=  
Content-Length: 0  
  

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 From URL-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 Wird zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird vom Blobdienst berechnet. Er ist nicht unbedingt identisch mit dem Wert, der in den Anforderungsheadern angegeben wird. Für Version 2019-02-02 oder höher wird dieser Header nur zurückgegeben, wenn die Anforderung über diesen Header verfügt.
x-ms-content-crc64 Für Version 2019-02-02 oder höher. Wird zurückgegeben, damit der Client die Integrität des Nachrichteninhalts überprüfen kann. Der Wert dieses Headers wird vom Blobdienst berechnet. Er ist nicht unbedingt identisch mit dem Wert, der in den Anforderungsheadern angegeben wird.

Dieser Header wird zurückgegeben, wenn x-ms-source-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 die durchgeführte Anforderung eindeutig und kann zur Problembehandlung für die Anforderung verwendet werden. Weitere Informationen finden Sie unter Problembehandlung für API-Vorgänge.
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 ausgeführt wurden.
Date Ein UTC-Datums-/Uhrzeitwert, der vom Dienst generiert wird, der den Zeitpunkt angibt, zu dem 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 erfolgreich mit dem angegebenen Algorithmus verschlüsselt wurde und false andernfalls.
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 zur Problembehandlung von Anforderungen und entsprechenden Antworten verwendet werden. 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:  
Transfer-Encoding: chunked  
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 From URL Vorgang wie unten beschrieben autorisieren.

Wichtig

Microsoft empfiehlt die Verwendung von 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 eine höhere 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 From URL Vorgang aufzurufen, und die integrierte Azure RBAC-Rolle mit den geringsten Berechtigungen, die diese Aktion enthält:

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 From URL-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. Beim Aufrufen Put Page From URL eines Blobnamens, der derzeit nicht vorhanden ist, wird der BlobNotFound-Fehler (HTTP-status Code 404 – Nicht gefunden) zurückgegeben.

In Version 2020-10-02 und höher wird Microsoft Entra Autorisierung für die Quelle des Kopiervorgangs unterstützt.

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

Der Aufruf Put Page From URL führt einen direkten Schreibvorgang für das angegebene Seitenblob aus. Sämtlicher Inhalt der angegebenen Seite wird durch das Update überschrieben.

Wichtig

Wenn für den Server ein Timeout besteht oder die Verbindung während einer Put Page From URLVerbindung geschlossen wird, wurde die Seite möglicherweise aktualisiert oder nicht. Daher sollten Sie mit einer Wiederholung des Updatevorgangs fortfahren, bis Sie eine Antwort mit einer Erfolgsmeldung empfangen.

Jeder Seitenbereich, der für einen Aktualisierungsvorgang mit übermittelt wird Put Page From URL , 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.

Verwalten von Parallelitätsproblemen

Der Blobdienst 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 Inhalts des BLOB sicherzustellen, sollte der Client beim Verarbeiten von Schreibvorgängen in überlappende Seiten einen oder mehrere der folgenden Ansätze verfolgen:

  • Sie können den Wert des Last-Modified-Antwortheaders für jeden erfolgreichen Aufruf von Put Page From URL überprüfen. Die Reihenfolge der vom Blobdienst zurückgegebenen Antworten entspricht nicht unbedingt der Reihenfolge, in der sie vom Dienst ausgeführt wurden. Der Wert von Last-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 und If-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 empfiehlt sich besonders für Clients, bei denen ein hoher Durchsatz für Seitenschreibvorgänge erforderlich ist. Dies wird im folgenden Abschnitt ausführlich beschrieben.

Verwenden der Seitenblobsequenznummer zum Wiederholen von Anforderungen

Wenn ein Aufruf für ein Put Page From URL Zeitüberschreitungs- oder keine Antwort zurückgibt, kann nicht sicher sein, ob die Anforderung erfolgreich war. Sie müssen die Anforderung daher erneut ausführen, aber aufgrund der verteilten Art der Azure-Speicherdienste ist es 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:

  1. Eine Put Page From URL Anforderung zum Schreiben des Werts "X" in Seite 0 ist ein Zeitüberschreitungsüberschreitung oder gibt keine Antwort zurück.

  2. Eine wiederholte Anforderung zum Schreiben von Wert "X" in Seite 0 wird erfolgreich abgeschlossen.

  3. Eine Anforderung zum Schreiben von Wert "Y" in Seite 0 wird erfolgreich abgeschlossen.

  4. Die ursprüngliche Anforderung war erfolgreich, und Wert "x" wird in Seite 0 geschrieben.

  5. 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 zwischen 100 und 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 beim erneuten Wiederholen einer Anforderung nicht erfolgreich ist. 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:

  1. Der Client erstellt ein Seitenblob mit Put Blob und legt seine Sequenznummer auf 0 fest.

  2. Eine Put Page From URL Anforderung zum Schreiben des Werts "X" in Seite 0, wobei der if-sequence-number-lt Header auf 1 Zeitüberschreitung festgelegt ist oder keine Antwort zurückgibt.

  3. Der Client ruft Set Blob-Eigenschaften auf, um die Sequenznummer auf 1 zu aktualisieren.

  4. Eine wiederholte Anforderung zum Schreiben des Werts "X" auf Seite 0, wobei if-sequence-number-lt der Wert auf "erfolgreich" festgelegt 2 ist.

  5. Eine Anforderung, den Wert "Y" auf Seite 0 zu schreiben, wobei if-sequence-number-lt der Wert auf "erfolgreich" festgelegt 2 ist.

  6. 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 auf 1festgelegt). Als Fehler wird SequenceNumberConditionNotMet (HTTP-Statuscode 412 - Vorbedingung nicht erfüllt) zurückgegeben.

  7. 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