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: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 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:
- 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 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 URL
Verbindung 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 vonPut 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 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 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:
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.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 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:
Der Client erstellt ein Seitenblob mit Put Blob und legt seine Sequenznummer auf 0 fest.
Eine
Put Page From URL
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 Set Blob-Eigenschaften auf, um die Sequenznummer auf 1 zu 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