Blob 서비스 작업의 조건부 헤더 지정
일부 Blob 서비스 작업에서는 조건부 헤더를 사용할 수 있습니다. 지정된 조건이 충족될 경우에만 작업을 수행하도록 조건부 헤더를 지정할 수 있습니다.
Blob 서비스는 조건부 헤더에 대한 HTTP/1.1 프로토콜 사양 을 따릅니다.
지원되는 조건부 헤더
다음 표에서는 지원되는 조건부 헤더에 대해 설명합니다.
조건부 헤더 | Description |
---|---|
If-Modified-Since |
DateTime 값입니다. 날짜 형식은 RFC 1123을 따릅니다. 자세한 내용은 헤더의 날짜-시간 값 표현을 참조하세요. 지정된 시간 이후 리소스가 수정된 경우에만 작업을 수행하려면 이 헤더를 지정합니다. |
If-Unmodified-Since |
DateTime 값입니다. 날짜 형식은 RFC 1123을 따릅니다. 자세한 내용은 헤더의 날짜-시간 값 표현을 참조하세요. 지정된 날짜/시간 이후 리소스가 수정되지 않은 경우에만 작업을 수행하려면 이 헤더를 지정합니다. |
If-Match |
ETag 값입니다. 리소스의 ETag가 지정된 값과 일치하는 경우에만 작업을 수행하려면 이 헤더를 지정합니다. 2011-08-18 버전 이상의 경우 ETag를 따옴표로 지정할 수 있습니다. |
If-None-Match |
ETag 값 또는 와일드카드 문자(*)입니다. 리소스의 ETag가 지정된 값과 일치하지 않는 경우에만 작업을 수행하려면 이 헤더를 지정합니다. 2011-08-18 버전 이상의 경우 ETag를 따옴표로 지정할 수 있습니다. 리소스가 존재하지 않는 경우에만 작업을 수행하려면 와일드카드 문자(*)를 지정합니다. 리소스가 존재하면 작업이 실패합니다. |
버전 2013-08-15 이상에서 Blob 서비스 읽기 작업의 조건부 헤더 지정
버전 2013-08-15부터 Blob 가져오기 및 Blob 속성 가져오기 작업은 여러 조건부 헤더를 지원합니다. 지원되는 조건부 헤더의 어떠한 조합도 지정할 수 있습니다. Blob 서비스는 다음 식에 따라 이러한 조건을 평가합니다.
If-Match && If-Unmodified-Since && (If-None-Match || If-Modified-Since)
또한 If-Match
및 If-None-Match
에 대한 값을 쉼표로 구분하여 여러 개 제공할 수도 있습니다.
If-Match
에 대한 값을 여러 개 지정하는 경우 Blob service는 전체 식을 평가하기 전에 제공된 모든 값에 대한 논리적 OR
연산을 수행합니다.
if-None-Match
에 대한 값을 여러 개 지정하는 경우에는 전체 식을 평가하기 전에 논리적 AND
연산을 수행합니다.
If-Modified-Since
및 If-Unmodified-Since
에 대한 값을 여러 개 지정하는 것은 지원되지 않으며 오류 코드 400(Bad Request
)이 발생합니다.
이 기능은 HTTP/1.1 사양 을 준수하고 CDN(Content Delivery Network) 또는 프록시 서버가 실행 중인 요청에 추가 조건부 헤더를 추가하는 시나리오를 수용하기 위해 사용하도록 설정됩니다. 조건부 헤더를 조합한 몇 가지 예는 다음과 같습니다.
예제 1:
및 If-Modified-Since
헤더를 포함하는 If-Match
Blob 가져오기 요청을 고려합니다. 다음 표는 헤더가 개별적으로 평가되는 경우의 결과와 함께 평가되는 경우의 결과를 나타냅니다.
조건부 헤더 | 개별적으로 평가되는 경우의 결과 | 조합되어 평가되는 경우의 결과 |
---|---|---|
If-Match |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Modified-Since |
200(확인) | 412(사전 조건 실패) |
If-Match |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Modified-Since |
304(수정 안 됨) | 412(사전 조건 실패) |
If-Match |
200(확인) | 200(확인) |
If-Modified-Since |
200(확인) | 200(확인) |
If-Match |
200(확인) | 304(수정 안 됨) |
If-Modified-Since |
304(수정 안 됨) | 304(수정 안 됨) |
예 2:
If-None-Match
및 If-Modified-Since
헤더가 포함된 요청을 살펴보겠습니다.
조건부 헤더 | 개별적으로 평가되는 경우의 결과 | 조합되어 평가되는 경우의 결과 |
---|---|---|
If-None-Match |
304(수정 안 됨) | 200(확인) |
If-Modified-Since |
200(확인) | 200(확인) |
If-None-Match |
200(확인) | 200(확인) |
If-Modified-Since |
200(확인) | 200(확인) |
If-None-Match |
200(확인) | 200(확인) |
If-Modified-Since |
304(수정 안 됨) | 200(확인) |
If-None-Match |
304(수정 안 됨) | 304(수정 안 됨) |
If-Modified-Since |
304(수정 안 됨) | 304(수정 안 됨) |
예제 3:
If-Modified-Since
, If-Match
및 If-Unmodified-Since
헤더가 포함된 요청을 살펴보겠습니다.
조건부 헤더 | 개별적으로 평가되는 경우의 결과 | 조합되어 평가되는 경우의 결과 |
---|---|---|
If-Modified-Since |
200(확인) | 412(사전 조건 실패) |
If-Match |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Unmodified-Since |
200(확인) | 412(사전 조건 실패) |
If-Modified-Since |
200(확인) | 412(사전 조건 실패) |
If-Match |
200(확인) | 412(사전 조건 실패) |
If-Unmodified-Since |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Modified-Since |
304(수정 안 됨) | 412(사전 조건 실패) |
If-Match |
200(확인) | 412(사전 조건 실패) |
If-Unmodified-Since |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Modified-Since |
304(수정 안 됨) | 304(수정 안 됨) |
If-Match |
200(확인) | 304(수정 안 됨) |
If-Unmodified-Since |
200(확인) | 304(수정 안 됨) |
예제 4:
If-Modified-Since
, If-None-Match
, If-Unmodified-Since
및 If-Match
헤더가 포함된 요청을 살펴보겠습니다.
결합 | 개별 http 상태 코드 | Blob 상태 가져오기 결과 |
---|---|---|
If-Modified-Since |
200(확인) | 200(확인) |
If-None-Match |
200(확인) | 200(확인) |
If-Unmodified-Since |
200(확인) | 200(확인) |
If-Match |
200(확인) | 200(확인) |
If-Modified-Since |
200(확인) | 412(사전 조건 실패) |
If-None-Match |
304(수정 안 됨) | 412(사전 조건 실패) |
If-Unmodified-Since |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Match |
200(확인) | 412(사전 조건 실패) |
If-Modified-Since |
200(확인) | 200(확인) |
If-None-Match |
304(수정 안 됨) | 200(확인) |
If-Unmodified-Since |
200(확인) | 200(확인) |
If-Match |
200(확인) | 200(확인) |
If-Modified-Since |
304(수정 안 됨) | 412(사전 조건 실패) |
If-None-Match |
200(확인) | 412(사전 조건 실패) |
If-Unmodified-Since |
200(확인) | 412(사전 조건 실패) |
If-Match |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Modified-Since |
304(수정 안 됨) | 412(사전 조건 실패) |
If-None-Match |
200(확인) | 412(사전 조건 실패) |
If-Unmodified-Since |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Match |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Modified-Since |
304(수정 안 됨) | 200(확인) |
If-None-Match |
200(확인) | 200(확인) |
If-Unmodified-Since |
200(확인) | 200(확인) |
If-Match |
200(확인) | 200(확인) |
If-Modified-Since |
304(수정 안 됨) | 412(사전 조건 실패) |
If-None-Match |
304(수정 안 됨) | 412(사전 조건 실패) |
If-Unmodified-Since |
412(사전 조건 실패) | 412(사전 조건 실패) |
If-Match |
200(확인) | 412(사전 조건 실패) |
2013-08-15 이전 버전에서 읽기 작업과 모든 버전에서 쓰기 작업을 위해 조건부 헤더 지정
2013-08-15 이전 버전에서 Blob 서비스 읽기 작업( Blob 가져오기 및 Blob 속성 가져오기)을 호출하고 버전에 관계없이 쓰기 작업을 호출할 때 다음 사항에 유의하세요.
요청에
If-None-Match
및If-Modified-Since
헤더가 모두 지정된 경우If-None-Match
에 지정된 조건에 따라 요청이 평가됩니다.요청에
If-Match
및If-Unmodified-Since
헤더가 모두 지정된 경우If-Match
에 지정된 조건에 따라 요청이 평가됩니다.위에 나열된 두 가지 조건부 헤더 조합을 제외하고, 요청에는 단일 조건부 헤더만 지정할 수 있습니다. 조건부 헤더를 두 개 이상 지정하면 상태 코드 400(
Bad Request
)이 발생합니다.응답에 ETag가 포함된 경우 ETag를 처리하기 전에 요청 및 응답의 버전의 확인합니다. 예를 들어 버전 2011-08-18 이상은 따옴표로 묶인 ETag를 반환하지만 이전 버전은 그렇지 않습니다. 응용 프로그램에서 평가를 수행하기 전에 두 가지 ETag 형식을 모두 처리할 수 있는지 확인하십시오.
RFC 2616 은 단일 헤더에서 여러 ETag 값을 허용하지만 Blob 서비스에 대한 요청에는 하나의 ETag 값만 포함될 수 있습니다. ETag 값을 두 개 이상 지정하면 상태 코드 400(
Bad Request
)이 발생합니다.
조건부 헤더 지원 작업
다음 표에서는 조건부 헤더를 지원하는 작업에 대해 설명합니다.
REST 작업 | 작업 유형 | 지원되는 조건부 헤더 |
---|---|---|
추가 블록 (버전 2015-02-21 이상) |
쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
URL에서 블록 추가 (버전 2018-11-09 이상) |
쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 복사 | 읽기 및 쓰기 | 대상 blob에 대한 조건: - If-modified-Since - If-Unmodified-Since - If-Match - If-None-Match - x-ms-if-tags 원본 blob에 대한 조건: - 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 |
Blob 삭제 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
컨테이너 삭제 | 쓰기 |
If-Modified-Since If-Unmodified-Since |
Blob 가져오기 | 읽기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 메타데이터 가져오기 | 읽기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 속성 가져오기 | 읽기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 태그 가져오기 (버전 2019-12-12 이상) |
읽기 | x-ms-if-tags |
블록 목록 가져오기 | 읽기 | x-ms-if-tags |
페이지 범위 가져오기 | 읽기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 임대 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
컨테이너 임대 | 쓰기 |
If-Modified-Since If-Unmodified-Since |
URL에서 Blob 배치 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match 원본 blob에 대한 조건: - x-ms-source-If-Modified-Since - x-ms-source-if-Unmodified-Since - x-ms-source-If-Match - x-ms-source-If-None-Match |
Blob 배치 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
URL에서 블록 배치 (버전 2018-03-28 이상) |
쓰기 |
x-ms-source-If-Modified-Since x-ms-source-If-Unmodified-Since x-ms-source-If-Match x-ms-source-If-None-Match |
블록 목록 배치 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
페이지 배치 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
URL에서 페이지 배치 (버전 2018-11-09 이상) |
쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 메타데이터 설정 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 속성 설정 | 쓰기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
컨테이너 ACL 설정 | 쓰기 |
If-Modified-Since If-Unmodified-Since |
컨테이너 메타데이터 설정 | 쓰기 | If-Modified-Since |
Blob 태그 설정 (버전 2019-12-12 이상) |
쓰기 | x-ms-if-tags |
Blob 계층 설정 | 쓰기 | x-ms-if-tags |
Blob 스냅샷 | 읽기 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Blob 불변성 정책 설정 | 쓰기 | If-Unmodified-Since |
다음 Blob 서비스 데이터 작업에서는 조건부 헤더를 현재 지원하지 않습니다.
조건부 헤더 지원 작업에 대한 HTTP 응답 코드
요청에 조건부 헤더가 포함되고 지정된 조건이 요청 중인 리소스에서 충족되지 않은 경우 Blob 서비스가 HTTP 응답 코드를 반환합니다. 반환된 응답 코드는 HTTP/1.1 프로토콜 사양(RFC 2616)을 따릅니다.
Azure .NET 클라이언트 라이브러리의 메서드는 이러한 오류 응답 코드를 StorageException 개체로 변환합니다.
읽기 작업
다음 표에서는 작업이 읽기 작업일 때 각 조건부 헤더에서 충족되지 않은 조건에 대해 반환된 응답 코드를 보여줍니다. 읽기 작업에는 GET 또는 HEAD 동사가 사용됩니다.
조건부 헤더 | 조건이 충족되지 않은 경우의 응답 코드 |
---|---|
If-Modified-Since |
수정 안 됨(304(수정 안 됨)) |
If-Unmodified-Since |
전제 조건 실패(412(전제 조건 실패)) |
If-Match |
전제 조건 실패(412(전제 조건 실패)) |
If-None-Match |
수정 안 됨(304(수정 안 됨)) |
버전 2013-08-15 이상에서 여러 헤더를 사용하는 경우의 결과는 위의 예들을 참조하십시오.
쓰기 작업
다음 표에서는 작업이 쓰기 작업일 때 각 조건부 헤더에서 충족되지 않은 조건에 대해 반환된 응답 코드를 보여줍니다. 쓰기 작업에는 PUT 또는 DELETE 동사가 사용됩니다.
조건부 헤더 | 조건이 충족되지 않은 경우의 응답 코드 |
---|---|
If-Modified-Since |
전제 조건 실패(412(전제 조건 실패)) |
If-Unmodified-Since |
전제 조건 실패(412(전제 조건 실패)) |
If-Match |
전제 조건 실패(412(전제 조건 실패)) |
If-None-Match |
전제 조건 실패(412(전제 조건 실패)) |
복사 작업
다음 표에서는 작업이 복사 작업일 때 각 조건부 헤더에서 충족되지 않은 조건에 대해 반환된 응답 코드를 보여줍니다. Blob 복사 작업은 동사 PUT을 사용합니다.
조건부 헤더 | 조건이 충족되지 않은 경우의 응답 코드 |
---|---|
If-Modified-Since |
전제 조건 실패(412(전제 조건 실패)) |
If-Unmodified-Since |
전제 조건 실패(412(전제 조건 실패)) |
If-Match |
전제 조건 실패(412(전제 조건 실패)) |
If-None-Match |
전제 조건 실패(412(전제 조건 실패)) |
x-ms-source-if-modified-since |
전제 조건 실패(412(전제 조건 실패)) |
x-ms-source-if-unmodified-since |
전제 조건 실패(412(전제 조건 실패)) |
x-ms-source-if-match |
전제 조건 실패(412(전제 조건 실패)) |
x-ms-source-if-none-match |
전제 조건 실패(412(전제 조건 실패)) |
태그 조건부 작업
Blob 서비스에서 지원하는 표준 HTTP 조건부 헤더 외에도 여러 작업은 Blob 리소스의 태그에 대한 조건도 지원합니다.
조건부 헤더 | Description |
---|---|
x-ms-if-tags |
버전 2019-12-12 이상.
TagsPredicate 값입니다. 조건자가 Blob의 태그에 대해 로 평가되는 경우에만 작업을 수행하도록 true 이 헤더를 지정합니다. |
x-ms-source-if-tags |
버전 2019-12-12 이상. Blob 복사에만 적용됩니다.
TagsPredicate 값입니다. 조건자가 원본 Blob의 태그에 대해 로 평가되는 경우에만 작업을 수행하도록 true 이 헤더를 지정합니다. |
x-ms-if-tags
또는 x-ms-source-if-tags
조건부 헤더가 요청에 있고 TagsPredicate
가 로 평가false
되면 Blob 서비스는 작업에 대한 오류 코드 412(사전 조건 실패)를 반환합니다.
호출자는 또는 x-ms-source-if-tags
조건부 헤더를 사용하려면 Blob에서 태그를 읽을 수 있는 x-ms-if-tags
권한이 있어야 합니다.
태그 조건자 구문
Blob 서비스는 헤더 값에 대한 ANSI SQL WHERE 절 문법의 하위 집합을 TagsPredicate
지원합니다. 다음과 같은 연산자가 지원됩니다.
연산자 | Description | 예제 |
---|---|---|
= |
같음 | Status = 'In Progress' |
<> |
같지 않음 | Status <> 'Done' |
> |
보다 큼 | LastModified > '2018-06-18 20:51:26Z' |
>= |
크거나 같음 | Priority >= '05' |
< |
보다 작음 | Age < '032' |
<= |
작거나 같음 | Reviewer <= 'Smith' |
AND |
논리적 AND | Name > 'C' AND Name < 'D' Age > '032' AND Age < '100' |
OR |
논리적 OR | Status = 'Done' or LastModified > '2018-06-18 20:51:26Z' |
모든 태그 값은 문자열이며 지원되는 이진 관계형 연산자는 태그 값의 사전 정렬을 사용합니다. 숫자와 날짜를 포함하여 문자열이 아닌 데이터 형식을 지원하려면 적절한 안쪽 여백과 정렬 가능한 서식을 사용해야 합니다. 태그 값은 작은따옴표로 묶어야 합니다.
태그 이름이 일반 SQL 식별자인 경우 이스케이프 없이 있을 수 있습니다. 특수 문자가 포함된 경우 큰따옴표(예: "TagName" = 'TagValue')로 구분되어야 합니다.
식에는 여러 태그 이름 및 값에 대한 비교가 포함될 수 있습니다. 괄호((
및 )
)는 논리 식을 그룹화하고 정식 연산 순서를 제어하는 데 사용할 수 있습니다. 에는 TagsPredicate
최대 10개의 논리 작업이 포함될 수 있습니다.
스토리지 서비스는 오류 코드 400(잘못된 요청)이 있는 잘못된 식이 포함된 요청을 거부합니다.