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-Since
header , dan If-Unmodified-Since
If-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-Since
header , 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 danIf-Modified-Since
, permintaan dievaluasi berdasarkan kriteria yang ditentukan dalamIf-None-Match
.Jika permintaan menentukan
If-Match
header danIf-Unmodified-Since
, permintaan dievaluasi berdasarkan kriteria yang ditentukan dalamIf-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).