Menentukan header kondisional untuk operasi Blob service

Beberapa operasi blob service mendukung penggunaan header kondisional. Anda dapat menentukan header bersyarah untuk melakukan operasi hanya jika kondisi tertentu telah terpenuhi.

Blob service mengikuti spesifikasi protokol HTTP/1.1 untuk header kondisional.

Header Bersyarah yang Didukung

Header bersyarkat yang didukung dijelaskan dalam tabel berikut ini.

Header bersyarah Deskripsi
If-Modified-Since Nilai DateTime. Format tanggal mengikuti RFC 1123. Untuk informasi selengkapnya, lihat Representasi nilai tanggal-waktu di header. Tentukan header ini untuk melakukan operasi hanya jika sumber daya telah dimodifikasi sejak waktu yang ditentukan.
If-Unmodified-Since Nilai DateTime. Format tanggal mengikuti RFC 1123. Untuk informasi selengkapnya, lihat Representasi nilai tanggal-waktu di header. Tentukan header ini untuk melakukan operasi hanya jika sumber daya belum dimodifikasi sejak tanggal/waktu yang ditentukan.
If-Match Nilai ETag. Tentukan header ini untuk melakukan operasi hanya jika ETag sumber daya cocok dengan nilai yang ditentukan. Untuk versi 2011-08-18 dan yang lebih baru, ETag dapat ditentukan dalam tanda kutip.
If-None-Match Nilai ETag, atau karakter kartubebas (*). Tentukan header ini untuk melakukan operasi hanya jika ETag sumber daya tidak cocok dengan nilai yang ditentukan. Untuk versi 2011-08-18 dan yang lebih baru, ETag dapat ditentukan dalam tanda kutip.

Tentukan karakter kartubebas (*) untuk melakukan operasi hanya jika sumber daya tidak ada, dan gagalkan operasi jika memang ada.

Menentukan Header Kondisional untuk Operasi Baca Blob Service di Versi 2013-08-15 atau Yang Lebih Baru

Dimulai dengan versi 2013-08-15, operasi Get Blob dan Get Blob Properties mendukung beberapa header kondisional. Anda dapat menentukan kombinasi header bersyarkat yang didukung. Blob service akan mengevaluasi kondisi ini sesuai dengan ekspresi berikut:

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

Anda juga dapat menyediakan beberapa nilai yang dipisahkan koma untuk If-Match dan If-None-Match. Jika Anda menentukan beberapa nilai untuk If-Match, maka Blob service melakukan operasi logis OR pada semua nilai yang disediakan sebelum mengevaluasi seluruh ekspresi. Jika Anda menentukan beberapa nilai untuk if-None-Match, maka layanan melakukan operasi logis AND sebelum mengevaluasi seluruh ekspresi. Menentukan beberapa nilai untuk If-Modified-Since dan If-Unmodified-Since tidak didukung dan menghasilkan kode kesalahan 400 (Bad Request).

Fitur ini diaktifkan untuk mematuhi spesifikasi HTTP/1.1 dan untuk memenuhi skenario di mana Content Delivery Network (CDN) atau server proksi menambahkan header kondisional tambahan ke permintaan dalam penerbangan. Di bawah ini adalah beberapa contoh kombinasi header bersyarkat yang berbeda.

Contoh 1:

Pertimbangkan permintaan Dapatkan Blob yang If-Match berisi header dan If-Modified-Since . Tabel berikut menunjukkan hasilnya jika header dievaluasi secara individual, dan hasilnya jika dievaluasi dalam kombinasi.

Header bersyarah Hasil jika dievaluasi secara individual Hasil jika dievaluasi dalam kombinasi
If-Match 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Modified-Since 200 (OK) 412 (Prasyarat Gagal)
If-Match 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Modified-Since 304 (Tidak Diubah) 412 (Prasyarat Gagal)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 304 (Tidak Diubah)
If-Modified-Since 304 (Tidak Diubah) 304 (Tidak Diubah)

Contoh 2:

Pertimbangkan permintaan yang berisi If-None-Match header dan If-Modified-Since .

Header bersyarah Hasil jika dievaluasi secara individual Hasil jika dievaluasi dalam kombinasi
If-None-Match 304 (Tidak Diubah) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (Tidak Diubah) 200 (OK)
If-None-Match 304 (Tidak Diubah) 304 (Tidak Diubah)
If-Modified-Since 304 (Tidak Diubah) 304 (Tidak Diubah)

Contoh 3:

Pertimbangkan permintaan yang berisi If-Modified-Sinceheader , dan If-Unmodified-SinceIf-Match .

Header bersyarah Hasil jika dievaluasi secara individual Hasil jika dievaluasi dalam kombinasi
If-Modified-Since 200 (OK) 412 (Prasyarat Gagal)
If-Match 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Unmodified-Since 200 (OK) 412 (Prasyarat Gagal)
If-Modified-Since 200 (OK) 412 (Prasyarat Gagal)
If-Match 200 (OK) 412 (Prasyarat Gagal)
If-Unmodified-Since 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Modified-Since 304 (Tidak Diubah) 412 (Prasyarat Gagal)
If-Match 200 (OK) 412 (Prasyarat Gagal)
If-Unmodified-Since 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Modified-Since 304 (Tidak Diubah) 304 (Tidak Diubah)
If-Match 200 (OK) 304 (Tidak Diubah)
If-Unmodified-Since 200 (OK) 304 (Tidak Diubah)

Contoh 4:

Pertimbangkan permintaan yang berisi If-Modified-Sinceheader , If-None-Match, If-Unmodified-Since dan If-Match .

Kombinasi Kode status http individual Dapatkan hasil status Blob
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 412 (Prasyarat Gagal)
If-None-Match 304 (Tidak Diubah) 412 (Prasyarat Gagal)
If-Unmodified-Since 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Match 200 (OK) 412 (Prasyarat Gagal)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 304 (Tidak Diubah) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (Tidak Diubah) 412 (Prasyarat Gagal)
If-None-Match 200 (OK) 412 (Prasyarat Gagal)
If-Unmodified-Since 200 (OK) 412 (Prasyarat Gagal)
If-Match 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Modified-Since 304 (Tidak Diubah) 412 (Prasyarat Gagal)
If-None-Match 200 (OK) 412 (Prasyarat Gagal)
If-Unmodified-Since 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Match 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Modified-Since 304 (Tidak Diubah) 200 (OK)
If-None-Match 200 (OK) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (Tidak Diubah) 412 (Prasyarat Gagal)
If-None-Match 304 (Tidak Diubah) 412 (Prasyarat Gagal)
If-Unmodified-Since 412 (Prasyarat Gagal) 412 (Prasyarat Gagal)
If-Match 200 (OK) 412 (Prasyarat Gagal)

Menentukan Header Bersyarah untuk Operasi Baca dalam Versi Sebelum 2013-08-15, dan untuk Operasi Tulis (Semua Versi)

Saat memanggil operasi baca layanan Blob (Dapatkan Properti Blob dan Dapatkan Blob) dengan versi sebelum 2013-08-15, dan saat memanggil operasi tulis apa pun terlepas dari versinya, ingatlah hal berikut:

  • Jika permintaan menentukan If-None-Match header dan If-Modified-Since , permintaan dievaluasi berdasarkan kriteria yang ditentukan dalam If-None-Match.

  • Jika permintaan menentukan If-Match header dan If-Unmodified-Since , permintaan dievaluasi berdasarkan kriteria yang ditentukan dalam If-Match.

  • Dengan pengecualian dua kombinasi header kondisional yang tercantum di atas, permintaan hanya dapat menentukan satu header kondisional. Menentukan lebih dari satu header bersyarah menghasilkan kode status 400 (Bad Request).

  • Jika respons menyertakan ETag, verifikasi versi permintaan dan respons sebelum memproses ETag. Misalnya, versi 2011-08-18 dan yang lebih baru mengembalikan ETag yang dikutip, tetapi versi yang lebih lama tidak. Pastikan aplikasi Anda dapat memproses kedua format ETag sebelum dievaluasi.

  • RFC 2616 memungkinkan beberapa nilai ETag dalam satu header, tetapi permintaan ke layanan Blob hanya dapat menyertakan satu nilai ETag. Menentukan lebih dari satu nilai ETag menghasilkan kode status 400 (Bad Request).

Header Bersyarah Pendukung Operasi

Operasi yang mendukung header bersyarkat dijelaskan dalam tabel berikut.

Operasi REST Jenis operasi Header bersyarah yang didukung
Append Blok

(versi 2015-02-21 dan yang lebih baru)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Append Blok Dari URL

(versi 2018-11-09 dan yang lebih baru)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Copy Blob Baca dan Tulis Untuk kondisi pada blob tujuan:

- If-Modified-Since

- If-Unmodified-Since

- If-Match

- If-None-Match

- x-ms-if-tags

Untuk kondisi pada blob sumber:

- x-ms-source-if-modified-since

- x-ms-source-if-unmodified-since

- x-ms-source-if-match

- x-ms-source-if-none-match

- x-ms-source-if-tags
Menghapus blob Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Hapus Kontainer Write If-Modified-Since

If-Unmodified-Since
Get Blob Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Get Properti Blob Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Dapatkan Tag Blob

(versi 2019-12-12 dan yang lebih baru)
Read x-ms-if-tags
Dapatkan Daftar Blokir Read x-ms-if-tags
Dapatkan Rentang Halaman Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Blob Sewa Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Menyewa Kontainer Write If-Modified-Since

If-Unmodified-Since
Masukkan Blob Dari URL Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Untuk kondisi pada blob sumber:

- x-ms-source-If-Modified-Since

- x-ms-source-if-Unmodified-Since

- x-ms-source-If-Match

- x-ms-source-If-None-Match

Masukkan Blob Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Blok Dari URL

(versi 2018-03-28 dan yang lebih baru)
Write x-ms-source-If-Modified-Since

x-ms-source-If-Unmodified-Since

x-ms-source-If-Match

x-ms-source-If-None-Match
Masukkan Daftar Blokir Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Halaman Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Halaman Dari URL

(versi 2018-11-09 dan yang lebih baru)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Set properti Blob Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Mengatur ACL Kontainer Write If-Modified-Since

If-Unmodified-Since
Mengatur Metadata Kontainer Write If-Modified-Since
Atur Tag Blob

(versi 2019-12-12 dan yang lebih baru)
Write x-ms-if-tags
Set Tingkat Blob Baca atau Tulis x-ms-if-tags
Snapshot Blob Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Mengatur Kebijakan Kekekalan Blob Write If-Unmodified-Since

Operasi data Blob service berikut saat ini tidak mendukung header kondisional:

Kode Respons HTTP untuk Operasi yang Mendukung Header Bersyarah

Jika permintaan menyertakan header kondisional dan kondisi yang ditentukan tidak terpenuhi oleh sumber daya yang diminta, layanan Blob mengembalikan kode respons HTTP. Kode respons yang dikembalikan sesuai dengan spesifikasi protokol HTTP/1.1 (RFC 2616).

Metode di pustaka klien Azure .NET mengonversi kode respons kesalahan ini menjadi objek StorageException.

Operasi Baca

Tabel berikut menunjukkan kode respons yang dikembalikan untuk kondisi tidak terencana untuk setiap header kondisional saat operasi adalah operasi baca. Operasi baca menggunakan kata kerja GET atau HEAD.

Header bersyarah Kode respons jika kondisi belum terpenuhi
If-Modified-Since Tidak Diubah (304 (Tidak Diubah))
If-Unmodified-Since Prasyarat Gagal (412 (Prasyarat Gagal))
If-Match Prasyarat Gagal (412 (Prasyarat Gagal))
If-None-Match Tidak Diubah (304 (Tidak Diubah))

Lihat contoh di atas untuk hasil saat menggunakan beberapa header dengan versi 2013-08-15 atau yang lebih baru.

Operasi Tulis

Tabel berikut menunjukkan kode respons yang dikembalikan untuk kondisi yang tidak terukur untuk setiap header kondisional saat operasi adalah operasi tulis. Operasi tulis menggunakan kata kerja PUT atau DELETE.

Header bersyarah Kode respons jika kondisi belum terpenuhi
If-Modified-Since Prasyarat Gagal (412 (Prasyarat Gagal))
If-Unmodified-Since Prasyarat Gagal (412 (Prasyarat Gagal))
If-Match Prasyarat Gagal (412 (Prasyarat Gagal))
If-None-Match Prasyarat Gagal (412 (Prasyarat Gagal))

Operasi Salin

Tabel berikut menunjukkan kode respons yang dikembalikan untuk kondisi yang tidak terukur untuk setiap header kondisional saat operasi adalah operasi salin. Operasi Salin Blob menggunakan kata kerja PUT.

Header bersyarah Kode respons jika kondisi belum terpenuhi
If-Modified-Since Prasyarat Gagal (412 (Prasyarat Gagal))
If-Unmodified-Since Prasyarat Gagal (412 (Prasyarat Gagal))
If-Match Prasyarat Gagal (412 (Prasyarat Gagal))
If-None-Match Prasyarat Gagal (412 (Prasyarat Gagal))
x-ms-source-if-modified-since Prasyarat Gagal (412 (Prasyarat Gagal))
x-ms-source-if-unmodified-since Prasyarat Gagal (412 (Prasyarat Gagal))
x-ms-source-if-match Prasyarat Gagal (412 (Prasyarat Gagal))
x-ms-source-if-none-match Prasyarat Gagal (412 (Prasyarat Gagal))

Operasi Bersyarah Tag

Selain header kondisional HTTP standar yang didukung oleh blob service, beberapa operasi juga mendukung kondisi terhadap tag pada sumber daya blob.

Header bersyarah Deskripsi
x-ms-if-tags Versi 2019-12-12 dan yang lebih baru. Nilai TagsPredicate. Tentukan header ini untuk melakukan operasi hanya jika predikat mengevaluasi terhadap true tag blob.
x-ms-source-if-tags Versi 2019-12-12 dan yang lebih baru. Berlaku hanya untuk Salin Blob. Nilai TagsPredicate. Tentukan header ini untuk melakukan operasi hanya jika predikat mengevaluasi terhadap true tag blob sumber.

x-ms-if-tags Jika header atau x-ms-source-if-tags kondisional ada dalam permintaan dan TagsPredicate mengevaluasi ke false, layanan Blob akan mengembalikan kode kesalahan 412 (Prasyarat Gagal) untuk operasi.

Pemanggil harus memiliki izin untuk membaca tag pada blob untuk menggunakan x-ms-if-tags header kondisional atau x-ms-source-if-tags .

Sintaks Predikat Tag

Layanan Blob mendukung subset tata bahasa klausa ANSI SQL WHERE untuk nilai TagsPredicate header. Operator berikut didukung:

Operator Deskripsi Contoh
= Sama dengan Status = 'In Progress'
<> Tidak sama dengan Status <> 'Done'
> Lebih besar dari LastModified > '2018-06-18 20:51:26Z'
>= Lebih besar dari atau sama dengan Priority >= '05'
< Kurang dari Age < '032'
<= Kurang dari atau sama dengan Reviewer <= 'Smith'
AND Logika And Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR Logika or Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

Semua nilai tag adalah string, dan operator relasional biner yang didukung menggunakan pengurutan leksikografis nilai tag. Untuk mendukung jenis data non-string, termasuk angka dan tanggal, padding yang sesuai dan pemformatan yang dapat diurutkan harus digunakan. Nilai tag harus diapit dalam tanda kutip tunggal.

Jika nama tag adalah pengidentifikasi SQL reguler, mereka mungkin ada tanpa melarikan diri; jika berisi karakter khusus, mereka harus dibatasi dengan tanda kutip ganda (misalnya "TagName" = 'TagValue').

Ekspresi dapat mencakup perbandingan untuk beberapa nama dan nilai tag. Tanda kurung (( dan )) dapat digunakan untuk mengelompokkan ekspresi logis dan mengontrol urutan operasi kanonis. TagsPredicate Mungkin termasuk paling banyak sepuluh (10) operasi logis.

Layanan penyimpanan akan menolak permintaan apa pun yang berisi ekspresi yang tidak valid dengan kode kesalahan 400 (Permintaan Buruk).

Lihat juga

Konsep Blob Service