Inserisci pagina dall'URL

L'operazione Put Page From URL scrive un intervallo di pagine in un BLOB di pagine in cui il contenuto viene letto da un URL. Questa API è disponibile a partire dalla versione 2018-11-09.

Richiesta

È possibile costruire la Put Page From URL richiesta come indicato di seguito. È consigliabile usare HTTPS. Sostituire myaccount con il nome dell'account di archiviazione:

URI della richiesta del metodo PUT Versione HTTP
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=page HTTP/1.1

URI del servizio di archiviazione emulato

Quando si effettua una richiesta nel servizio di archiviazione emulato, specificare il nome host dell'emulatore e la porta del servizio BLOB come 127.0.0.1:10000, seguita dal nome dell'account di archiviazione emulato:

URI della richiesta del metodo PUT Versione HTTP
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=page HTTP/1.1

Per altre informazioni, vedere Usare l'emulatore Azurite per lo sviluppo locale di Archiviazione di Azure.

Parametri URI

Nell'URI della richiesta puoi specificare i parametri seguenti:

Parametro Descrizione
timeout Facoltativa. Il parametro timeout viene espresso in secondi. Per altre informazioni, vedere Impostare timeout per le operazioni del servizio BLOB.

Intestazioni della richiesta

Le intestazioni di richiesta obbligatorie e facoltative sono descritte nella tabella seguente:

Intestazione della richiesta Descrizione
Authorization Obbligatorio. Specifica lo schema di autorizzazione, il nome dell'account e la firma. Per altre informazioni, vedere Autorizzare le richieste ad Archiviazione di Azure.
Date o x-ms-date Obbligatorio. Specifica la data per la richiesta nel fuso orario UTC (Coordinated Universal Time). Per altre informazioni, vedere Autorizzare le richieste ad Archiviazione di Azure.
x-ms-version Obbligatorio per tutte le richieste autorizzate. Specifica la versione dell'operazione da usare per questa richiesta. Per altre informazioni, vedere Controllo delle versioni per i servizi di archiviazione di Azure.
Range Range o x-ms-range è obbligatorio.

Specifica l'intervallo di byte da scrivere come pagina. È necessario specificare l'inizio e la fine dell'intervallo. Questa intestazione è definita dalla specifica del protocollo HTTP/1.1.

Per un'operazione di aggiornamento pagina, l'intervallo di pagine può essere fino a 4 MiB di dimensioni.

Poiché le pagine devono essere allineate ai limiti di 512 byte, l'offset iniziale deve essere un modulo pari a 512 e l'offset finale deve essere un modulo pari a 512 - 1. Esempi di intervalli di byte validi sono 0-511, 512-1023 e così via.

Il servizio Blob accetta solo un singolo intervallo in byte per l'intestazione Range e l'intervallo di byte deve essere specificato nel formato seguente: bytes=startByte-endByte.

Se Range e x-ms-range sono entrambi specificati, il servizio usa il valore di x-ms-range. Per altre informazioni, vedere Specificare l'intestazione dell'intervallo per le operazioni del servizio BLOB.
x-ms-range Range o x-ms-range è obbligatorio.

Specifica l'intervallo di byte da scrivere come pagina. È necessario specificare l'inizio e la fine dell'intervallo. Questa intestazione è definita dalla specifica del protocollo HTTP/1.1.

L'intervallo di pagine può essere fino a 4 MiB di dimensioni.

Poiché le pagine devono essere allineate ai limiti di 512 byte, l'offset iniziale deve essere un modulo pari a 512 e l'offset finale deve essere un modulo pari a 512 - 1. Esempi di intervalli di byte validi sono 0-511, 512-1023 e così via.

Il servizio Blob accetta solo un singolo intervallo in byte per l'intestazione x-ms-range e l'intervallo di byte deve essere specificato nel formato seguente: bytes=startByte-endByte.

Se Range e x-ms-range sono entrambi specificati, il servizio usa il valore di x-ms-range. Per altre informazioni, vedere Specificare l'intestazione dell'intervallo per le operazioni del servizio BLOB.
Content-Length Obbligatorio. Specifica il numero di byte trasmessi nel corpo della richiesta. Il valore di questa intestazione deve essere impostato su zero. Quando la lunghezza non è zero, l'operazione ha esito negativo con il codice di stato 400 (richiesta non valida).
x-ms-copy-source:name Obbligatorio. Specifica l'URL del BLOB di origine. Il valore può essere un URL di fino a 2 KiB in lunghezza che specifica un BLOB. La codifica del valore deve essere di tipo URL in quanto viene visualizzato in un URI di richiesta. Il BLOB di origine deve essere pubblico o deve essere autorizzato tramite una firma di accesso condiviso. Se il BLOB di origine è pubblico, non è necessaria alcuna autorizzazione per eseguire l'operazione. Ecco alcuni esempi di URL dell'oggetto di origine:

- 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> facoltativo. Specifica lo schema di autorizzazione e la firma per l'origine di copia. Per altre informazioni, vedere Autorizzare le richieste ad Archiviazione di Azure.
Solo un bearer di schema è supportato per Azure Active Directory.
Questa intestazione è supportata nella versione 2020-10-02 e successiva.
x-ms-source-range Carica i byte del BLOB nell'URL di origine nell'intervallo specificato. È necessario specificare l'inizio e la fine dell'intervallo. Questa intestazione è definita dalla specifica del protocollo HTTP/1.1.

L'intervallo di pagine può essere fino a 4 MiB di dimensioni.

Il servizio Blob accetta solo un singolo intervallo in byte per l'intestazione x-ms-source-range e l'intervallo di byte deve essere specificato nel formato seguente: bytes=startByte-endByte.

Per altre informazioni, vedere Specificare l'intestazione dell'intervallo per le operazioni del servizio BLOB .
x-ms-source-content-md5 facoltativo. Hash MD5 del contenuto della pagina dall'URI. Questo hash viene usato per verificare l'integrità della pagina durante il trasporto dei dati dall'URI. Quando viene specificata questa intestazione, il servizio di archiviazione confronta l'hash del contenuto che è arrivato dall'origine copia con questo valore di intestazione.

Nota: questo hash MD5 non viene archiviato con il BLOB.

Se i due hash non corrispondono, l'operazione non riesce con il codice di errore 400 (richiesta non valida).
x-ms-source-content-crc64 facoltativo. Hash CRC64 del contenuto della pagina dall'URI. Questo hash viene usato per verificare l'integrità della pagina durante il trasporto dei dati dall'URI. Quando viene specificata questa intestazione, il servizio di archiviazione confronta l'hash del contenuto che è arrivato dall'origine copia con questo valore di intestazione.

Nota: questo hash CRC64 non viene archiviato con il BLOB.

Se i due hash non corrispondono, l'operazione non riesce con il codice di errore 400 (richiesta non valida).

Se sono presenti entrambe x-ms-source-content-md5 le x-ms-source-content-crc64 intestazioni, la richiesta ha esito negativo con una richiesta di 400 (richiesta non valida).

Questa intestazione è supportata nella versione 2019-02-02 e successiva.
x-ms-lease-id:<ID> Obbligatoria se il Blob presenta un lease attivo. Per eseguire questa operazione su un Blob con un lease attivo, specificare l'ID lease valido per questa intestazione.
x-ms-if-sequence-number-le: <num> facoltativo. Se il numero di sequenza del BLOB è minore o uguale al valore specificato, la richiesta procede. In caso contrario, non riesce con l'errore SequenceNumberConditionNotMet (codice di stato HTTP 412 – Precondizione non riuscita).
x-ms-if-sequence-number-lt: <num> facoltativo. Se il numero di sequenza del BLOB è minore del valore specificato, la richiesta procede. In caso contrario, l'errore ha esito negativo con l'errore SequenceNumberConditionNotMet (codice di stato HTTP 412 - Precondizione non riuscita).
x-ms-if-sequence-number-eq: <num> facoltativo. Se il numero di sequenza del BLOB è uguale al valore specificato, la richiesta procede. In caso contrario, l'errore ha esito negativo con l'errore SequenceNumberConditionNotMet (codice di stato HTTP 412 - Precondizione non riuscita).
If-Modified-Since facoltativo. Valore DateTime. Specificare questa intestazione condizionale per scrivere la pagina solo se il Blob è stato modificato dopo la data e l'ora specificate. Se il BLOB non è stato modificato, il servizio BLOB restituisce il codice di stato 412 (Precondizione non riuscita).
If-Unmodified-Since facoltativo. Valore DateTime. Specificare questa intestazione condizionale per scrivere la pagina solo se il BLOB non è stato modificato dopo la data/ora specificata. Se il Blob è stato modificato, il servizio Blob restituisce il codice di stato 412 (Condizione preliminare non riuscita).
If-Match facoltativo. Valore ETag. Specificare un valore ETag per questa intestazione condizionale per scrivere la pagina solo se il valore ETag del Blob corrisponde al valore specificato. Se i valori non corrispondono, il servizio BLOB restituisce il codice di stato 412 (Precondizione non riuscita).
If-None-Match facoltativo. Valore ETag.

Specificare un valore ETag per questa intestazione condizionale per scrivere la pagina solo se il valore ETag del BLOB non corrisponde al valore specificato. Se i valori sono identici, tramite il servizio Blob viene restituito il codice di stato 412 (Condizione preliminare non riuscita).
x-ms-encryption-scope facoltativo. Indica l'ambito di crittografia da usare per crittografare il contenuto di origine. Questa intestazione è supportata nella versione 2019-02-02 e successive.
x-ms-client-request-id facoltativo. Fornisce un valore opaco generato dal client con un limite di caratteri di 1 kibibyte (KiB) registrato nei log al momento della configurazione della registrazione. È consigliabile usare questa intestazione per correlare le attività lato client alle richieste ricevute dal server. Per altre informazioni, vedere Monitorare Archiviazione BLOB di Azure.

Questa operazione supporta l'utilizzo delle intestazioni condizionali per eseguire l'operazione solo se viene soddisfatta una determinata condizione. Per altre informazioni, vedere Specificare intestazioni condizionali per le operazioni del servizio BLOB.

Intestazioni di richiesta (chiavi di crittografia fornite dal cliente)

A partire dalla versione 2019-02-02, è possibile specificare le intestazioni seguenti nella richiesta per crittografare un BLOB crittografato con una chiave fornita dal cliente. La crittografia con una chiave fornita dal cliente (e il set corrispondente di intestazioni) è facoltativa.

Intestazione della richiesta Descrizione
x-ms-encryption-key Obbligatorio. Chiave di crittografia AES-256 con codifica Base64.
x-ms-encryption-key-sha256 Obbligatorio. Hash SHA256 con codifica Base64 della chiave di crittografia.
x-ms-encryption-algorithm: AES256 Obbligatorio. Specifica l'algoritmo da utilizzare per la crittografia. Il valore di questa intestazione deve essere AES256.

Testo della richiesta

Il corpo della richiesta contiene il contenuto della pagina.

Richiesta di esempio

  
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  
  

Risposta

Nella risposta sono inclusi un codice di stato HTTP e un set di intestazioni per la risposta.

Codice stato

Un'operazione completata correttamente restituisce il codice di stato 201 (Creato).

Per altre informazioni sui codici di stato, vedere Codici di stato e di errore.

Intestazioni di risposta

Nella risposta per questa operazione sono incluse le intestazioni riportate di seguito; inoltre, possono essere incluse intestazioni HTTP standard aggiuntive. Tutte le intestazioni standard sono conformi alla specifica del protocollo HTTP/1.1.

Sintassi Descrizione
ETag Valore ETag per il Blob. Se la versione della richiesta è 2011-08-18 e versioni successive, il valore ETag viene racchiuso tra virgolette. Il valore ETag può essere utilizzato per eseguire un'operazione Put Page From URL condizionale specificando il relativo valore per l'intestazione della richiesta If-Match o If-None-Match.
Last-Modified Data e ora dell'ultima modifica del BLOB. Il formato data è conforme a RFC 1123. Per altre informazioni, vedere Rappresentare i valori di data/ora nelle intestazioni.

Qualsiasi operazione di scrittura sul Blob, inclusi aggiornamenti dei metadati o delle proprietà del Blob, comporta la modifica dell'ora dell'ultima modifica del Blob.
Content-MD5 Restituito in modo che il client possa verificare l'integrità del contenuto del messaggio. Il valore di questa intestazione viene calcolato dal servizio BLOB. Non è necessariamente uguale al valore specificato nelle intestazioni della richiesta. Per la versione 2019-02-02 o successiva, questa intestazione viene restituita solo quando la richiesta ha questa intestazione.
x-ms-content-crc64 Per la versione 2019-02-02 o successiva. Restituito in modo che il client possa verificare l'integrità del contenuto del messaggio. Il valore di questa intestazione viene calcolato dal servizio BLOB. Non è necessariamente uguale al valore specificato nelle intestazioni della richiesta.

Questa intestazione viene restituita quando x-ms-source-content-md5 l'intestazione non è presente nella richiesta.
x-ms-blob-sequence-number Numero di sequenza corrente per il Blob di pagine.
x-ms-request-id Identifica in modo univoco la richiesta effettuata e può essere usata per risolvere i problemi della richiesta. Per altre informazioni, vedere Risolvere i problemi relativi alle operazioni api.
x-ms-version Indica la versione del servizio BLOB utilizzata per eseguire la richiesta. Questa intestazione viene restituita per le richieste effettuate rispetto alla versione 2009-09-19 e successive.
Date Valore di data/ora UTC generato dal servizio, che indica l'ora di avvio della risposta.
x-ms-request-server-encrypted: true/false Versione 2015-12-11 e successive. Il valore di questa intestazione è impostato su true se il contenuto della richiesta viene crittografato correttamente usando l'algoritmo specificato e false in caso contrario.
x-ms-encryption-key-sha256 Versione 2019-02-02 e successive. Restituito se la richiesta ha usato una chiave fornita dal cliente per la crittografia, in modo che il client possa assicurarsi che il contenuto della richiesta venga crittografato correttamente usando la chiave fornita.
x-ms-encryption-scope Versione 2019-02-02 e successive. Restituito se la richiesta ha usato un ambito di crittografia, in modo che il client possa garantire che il contenuto della richiesta venga crittografato correttamente usando l'ambito di crittografia.
x-ms-client-request-id Può essere usato per risolvere i problemi relativi alle richieste e alle risposte corrispondenti. Il valore di questa intestazione è uguale al valore dell'intestazione x-ms-client-request-id se è presente nella richiesta e il valore non contiene più di 1.024 caratteri ASCII visibili. Se l'intestazione x-ms-client-request-id non è presente nella richiesta, non sarà presente nella risposta.

Corpo della risposta

Nessuno.

Risposta di esempio

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  
  

Autorizzazione

L'autorizzazione è necessaria quando si chiama un'operazione di accesso ai dati in Archiviazione di Azure. È possibile autorizzare l'operazione Put Page From URL come descritto di seguito.

Archiviazione di Azure supporta l'uso di Microsoft Entra ID per autorizzare le richieste ai dati BLOB. Con Microsoft Entra ID è possibile usare il controllo degli accessi in base al ruolo di Azure per concedere le autorizzazioni a un'entità di sicurezza. L'entità di sicurezza può essere un utente, un gruppo, un'entità servizio applicazione o un'identità gestita di Azure. L'entità di sicurezza viene autenticata da Microsoft Entra ID per restituire un token OAuth 2.0. Il token può quindi essere usato per autorizzare una richiesta relativa al servizio BLOB.

Per altre informazioni sull'autorizzazione usando Microsoft Entra ID, vedere Autorizzare l'accesso ai BLOB usando Microsoft Entra ID.

Autorizzazioni

Di seguito è riportata l'azione RBAC necessaria per un utente, un gruppo o un'entità servizio di Microsoft Entra per chiamare l'operazione Put Page From URL e il ruolo di controllo degli accessi in base al ruolo predefinito di Azure con privilegi minimi che include questa azione:

Per altre informazioni sull'assegnazione dei ruoli tramite controllo degli accessi in base al ruolo di Azure, vedere Assegnare un ruolo di Azure per l'accesso ai dati BLOB.

Commenti

Tramite l'operazione Put Page From URL viene scritto un intervallo di pagine in un Blob di pagine. Questa operazione può essere chiamata solo in un BLOB di pagine esistente. Non può essere chiamato per creare un nuovo BLOB di pagine, né può essere chiamato in un BLOB a blocchi. La chiamata Put Page From URL con un nome BLOB che non esiste attualmente restituisce l'errore BLOBNotFound (codice di stato HTTP 404 - Non trovato).

Nella versione 2020-10-02 e successiva, l'autorizzazione di Azure Active Directory è supportata per l'origine dell'operazione di copia.

Per creare un nuovo BLOB di pagine, chiamare Put BLOB e specificare il tipo di BLOB da creare come BLOB di pagine. Un BLOB di pagine può essere fino a 8 Dimensioni TiB.

Se il BLOB ha un lease attivo, il client deve specificare un ID lease valido nella richiesta per scrivere una pagina.

Operazioni di aggiornamento delle pagine

La chiamata Put Page From URL esegue una scrittura sul posto nel BLOB di pagine specificato. Il contenuto della pagina specificata viene sovrascritto con l'aggiornamento.

Importante

Se il server non esegue il timeout o la connessione viene chiusa durante un Put Page From URLoggetto , la pagina potrebbe o non essere stata aggiornata. È pertanto consigliabile tentare l'aggiornamento finché non si riceve una risposta che indica l'esito positivo.

Ogni intervallo di pagine inviate con Put Page From URL per un'operazione di aggiornamento può essere fino a 4 MiB di dimensioni. L'inizio e la fine dell'intervallo di pagine devono essere allineati al limite di 512 byte. Se si tenta di caricare un intervallo di pagine maggiore di 4 MiB, il servizio restituisce il codice di stato 413 (Entità richiesta troppo grande).

Gestire i problemi di concorrenza

Il servizio BLOB gestisce le scritture simultanee in pagine sovrapposte in sequenza. Ovvero, l'ultima pagina elaborata dal servizio determina il contenuto del BLOB. Di conseguenza, per garantire l'integrità del contenuto del Blob, il client deve gestire le scritture sulle pagine sovrapposte utilizzando uno o più dei modi seguenti:

  • È possibile controllare il valore dell'intestazione della risposta Last-Modified per ogni chiamata completata a Put Page From URL. L'ordine delle risposte restituite dal servizio BLOB non corrisponde necessariamente all'ordine in cui sono stati eseguiti dal servizio. Tuttavia, il valore di Last-Modified indica sempre l'ordine in cui il servizio ha elaborato le richieste.

  • È possibile eseguire gli aggiornamenti in modo condizionale in base al valore ETag del Blob o all'ora dell'ultima modifica utilizzando la concorrenza ottimistica. Questo approccio è la soluzione appropriata se il numero di scritture simultanee è relativamente basso. Utilizzare le intestazioni di richiesta condizionali If-Match, If-None-Match, If-Modified-Since e If-Unmodified-Since a questo scopo.

  • È possibile chiamare BLOB di lease per bloccare il BLOB rispetto ad altre scritture per un periodo di un minuto o più tempo se il lease viene rinnovato.

  • È possibile usare il numero di sequenza del BLOB per assicurarsi che la ripetizione di una richiesta per cui non è stata eseguita alcuna risposta non genera aggiornamenti simultanei. Questo approccio è da preferire per i client che richiedono una velocità effettiva elevata per la scrittura di pagine. è descritto in dettaglio nella sezione seguente.

Usare il numero di sequenza BLOB della pagina per ripetere le richieste

Quando una chiamata al Put Page From URL timeout o non restituisce una risposta, non è possibile sapere se la richiesta ha esito positivo. È quindi necessario riprovare la richiesta, ma a causa della natura distribuita dei servizi di archiviazione di Azure, è possibile che la richiesta originale venga elaborata dopo che la richiesta ritrita ha avuto esito positivo. La richiesta originale ritardata può sovrascrivere altri aggiornamenti e restituire un risultato imprevisto. La sequenza seguente illustra come può accadere:

  1. Richiesta Put Page From URL di scrittura del valore "X" nella pagina 0 timeout o non restituisce una risposta.

  2. Una nuova richiesta per scrivere il valore "X" sulla pagina 0 ha esito positivo.

  3. Una richiesta per scrivere il valore "Y" sulla pagina 0 ha esito positivo.

  4. La richiesta originale ha esito positivo, quindi viene scritto il valore "X" sulla pagina 0.

  5. La lettura della pagina 0 restituisce il valore "X", anche se il client a questo punto si aspettava il valore "Y".

Questo tipo di conflitto può verificarsi quando la richiesta originale non restituisce un codice di stato compreso tra 100-499 o 503 (server occupato). Se viene restituito uno di questi codici di stato, si può sapere con sicurezza se la richiesta ha avuto esito positivo o negativo. Se invece il servizio restituisce un codice di stato non compreso in questo intervallo, non vi è modo di conoscere lo stato della richiesta originale.

Per evitare questo tipo di conflitto, è possibile usare il numero di sequenza del BLOB di pagine per assicurarsi che quando si riprova a una richiesta, la richiesta originale non avrà esito positivo. A tale scopo, incrementare il numero di sequenza prima di ritentare la richiesta originale. È quindi possibile usare le intestazioni del numero di sequenza condizionale per assicurarsi che la richiesta non corrisponda se il numero di sequenza non corrisponde al numero di sequenza previsto. Nella sequenza seguente viene illustrato questo approccio:

  1. Il client crea un BLOB di pagine con Put BLOB e imposta il numero di sequenza su 0.

  2. Richiesta Put Page From URL di scrittura del valore "X" nella pagina 0 con l'intestazione if-sequence-number-lt impostata su 1 timeout o non restituisce una risposta.

  3. Il client chiama Set Blob Properties per aggiornare il numero di sequenza a 1.

  4. Richiesta riprovata per scrivere il valore "X" nella pagina 0 con if-sequence-number-lt impostato su 2 esito positivo.

  5. Richiesta di scrittura del valore "Y" nella pagina 0 con if-sequence-number-lt l'impostazione di 2 esito positivo.

  6. La richiesta originale viene infine elaborata, ma non riesce perché specifica la condizione in cui il numero di sequenza deve essere minore di 1, ovvero l'intestazione if-sequence-num-lt è impostata su 1). L'errore è SequenceNumberConditionNotMet (codice di stato HTTP 412 – Condizione preliminare non riuscita).

  7. La lettura della pagina 0 restituisce il valore "Y" previsto.

Vedi anche

Autorizzare le richieste ad Archiviazione di Azure
Stato e codici errore
Impostare timeout per le operazioni del servizio BLOB