Blob service 작업에 대 한 조건부 헤더 지정

일부 Blob 서비스 작업에서는 조건부 헤더를 사용할 수 있습니다. 지정된 조건이 충족될 경우에만 작업을 수행하도록 조건부 헤더를 지정할 수 있습니다.

Blob service는 조건부 헤더에 대 한 HTTP/1.1 프로토콜 사양을 따릅니다.

지원 되는 조건부 헤더

다음 표에서는 지원되는 조건부 헤더에 대해 설명합니다.

조건부 헤더 Description
If-Modified-Since DateTime 값입니다. 지정된 시간 이후 리소스가 수정된 경우에만 작업을 수행하려면 이 헤더를 지정합니다.
If-Unmodified-Since DateTime 값입니다. 지정된 날짜/시간 이후 리소스가 수정되지 않은 경우에만 작업을 수행하려면 이 헤더를 지정합니다.
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-MatchIf-None-Match에 대한 값을 쉼표로 구분하여 여러 개 제공할 수도 있습니다. If-Match에 대한 값을 여러 개 지정하는 경우 Blob service는 전체 식을 평가하기 전에 제공된 모든 값에 대한 논리적 OR 연산을 수행합니다. if-None-Match에 대한 값을 여러 개 지정하는 경우에는 전체 식을 평가하기 전에 논리적 AND 연산을 수행합니다. If-Modified-SinceIf-Unmodified-Since에 대한 값을 여러 개 지정하는 것은 지원되지 않으며 오류 코드 400(Bad Request)이 발생합니다.

이 기능은 HTTP/1.1 사양을 준수 하 고 CDN (Content Delivery Network) 또는 프록시 서버에서 추가 조건부 헤더를 처리 중인 요청에 추가 하는 시나리오를 지원 하기 위해 사용할 수 있습니다. 조건부 헤더를 조합한 몇 가지 예는 다음과 같습니다.

예제 1:

및 헤더를 포함 하는 Blob 가져오기 요청을 고려 If-Match If-Modified-Since 합니다. 다음 표에서는 헤더를 개별적으로 평가 하는 경우의 결과와 조합 하 여 계산 된 경우의 결과를 보여 주는 방법을 보여 주는 것입니다.

조건부 헤더 개별적으로 평가되는 경우의 결과 조합되어 평가되는 경우의 결과
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-MatchIf-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-MatchIf-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-SinceIf-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 service 읽기 작업 (Blob 가져오기blob 속성 가져오기)을 호출할 때 버전과 관계 없이 쓰기 작업을 호출 하는 경우에는 다음 사항에 유의 하세요.

  • 요청에 If-None-MatchIf-Modified-Since 헤더가 모두 지정된 경우 If-None-Match에 지정된 조건에 따라 요청이 평가됩니다.

  • 요청에 If-MatchIf-Unmodified-Since 헤더가 모두 지정된 경우 If-Match에 지정된 조건에 따라 요청이 평가됩니다.

  • 위에 나열된 두 가지 조건부 헤더 조합을 제외하고, 요청에는 단일 조건부 헤더만 지정할 수 있습니다. 조건부 헤더를 두 개 이상 지정하면 상태 코드 400(Bad Request)이 발생합니다.

  • 응답에 ETag가 포함된 경우 ETag를 처리하기 전에 요청 및 응답의 버전의 확인합니다. 예를 들어 버전 2011-08-18 이상은 따옴표로 묶인 ETag를 반환하지만 이전 버전은 그렇지 않습니다. 응용 프로그램에서 평가를 수행하기 전에 두 가지 ETag 형식을 모두 처리할 수 있는지 확인하십시오.

  • RFC 2616 에서는 단일 헤더에 여러 etag 값을 사용할 수 있지만 Blob service에 대 한 요청은 etag 값을 하나만 포함할 수 있습니다. ETag 값을 두 개 이상 지정하면 상태 코드 400(Bad Request)이 발생합니다.

조건부 헤더를 지 원하는 작업

다음 표에서는 조건부 헤더를 지원하는 작업에 대해 설명합니다.

REST 작업 작업 유형 지원되는 조건부 헤더
추가 블록

(버전 2015-02-21 이상)
쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
URL의 블록 추가

(버전 2018-11-09 이상)
쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
Blob 복사 읽기 및 쓰기 대상 blob에 대한 조건:

- If-Modified-이후

- If-수정 되지 않음-이후

- -Match

- -없음-일치

- x-y-태그

원본 blob에 대한 조건:

- x-m-소스-수정 된 경우-이후

- x-ms-원본-수정 되지 않음-이후

- x-m-소스-일치 하는 경우

- x-m-원본--없음-일치

- x-y-소스-태그
Blob 삭제 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
컨테이너 삭제 쓰기 If-Modified-Since

If-Unmodified-Since
Blob 가져오기 읽기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
Blob 메타데이터 가져오기 읽기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
Blob 속성 가져오기 읽기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
Blob 태그 가져오기

(버전 2019-12-12 이상)
읽기 x-y-태그
블록 목록 가져오기 읽기 x-y-태그
페이지 범위 가져오기 읽기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
Blob 임대 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
컨테이너 임대 쓰기 If-Modified-Since

If-Unmodified-Since
URL에서 Blob 배치 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

원본 blob에 대한 조건:

- x-m-소스-수정 된 경우-이후

- x-ms-원본-수정 되지 않음-이후

- x-m-소스-일치 하는 경우

- x-m-원본--없음-일치

Blob 배치 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
URL에서 블록 배치

(버전 2018-03-28 이상)
쓰기 x-m-소스-수정 된 경우-이후

x-ms-원본-수정 되지 않음-이후

x-m-소스-일치 하는 경우

x-m-원본--없음-일치
블록 목록 배치 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
페이지 배치 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
URL에서 페이지 배치

(버전 2018-11-09 이상)
쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
Blob 메타데이터 설정 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
Blob 속성 설정 쓰기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그
컨테이너 ACL 설정 쓰기 If-Modified-Since

If-Unmodified-Since
컨테이너 메타 데이터 설정 쓰기 If-Modified-Since
Blob 태그 설정

(버전 2019-12-12 이상)
쓰기 x-y-태그
Blob 계층 설정 읽기 또는 쓰기 x-y-태그
Blob 스냅샷 읽기 If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-y-태그

다음 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 service에서 지 원하는 표준 HTTP 조건부 헤더 외에도 여러 가지 작업에서 Blob 리소스의 태그에 대 한 조건을 지원 합니다.

조건부 헤더 Description
x-ms-if-tags 2019-12-12 이상 버전 TagsPredicate 값입니다. 조건자가 blob의 태그에 대해로 평가 되는 경우에만 작업을 수행 하려면이 헤더를 지정 true 합니다.
x-ms-source-if-tags 2019-12-12 이상 버전 Copy Blob에만 적용 됩니다. TagsPredicate 값입니다. 조건자가 원본 blob의 태그에 대해로 평가 되는 경우에만 작업을 수행 하려면이 헤더를 지정 true 합니다.

x-ms-if-tags또는 x-ms-source-if-tags 조건부 헤더가 요청에 있고이로 평가 되는 경우 TagsPredicate false Blob service는 작업에 대해 오류 코드 412 (전제 조건 실패)를 반환 합니다.

호출자는 x-ms-if-tags 또는 조건부 헤더를 사용 하기 위해 blob의 태그를 읽을 수 있는 권한이 있어야 합니다 x-ms-source-if-tags .

태그 조건자 구문

Blob service는 헤더 값에 대 한 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 ').

식에는 여러 태그 이름 및 값에 대 한 비교가 포함 될 수 있습니다. 괄호 ( () )를 사용 하 여 논리 식을 그룹화 하 고 작업의 정식 순서를 제어할 수 있습니다. 에는 최대 10 개의 TagsPredicate 논리적 연산이 포함 될 수 있습니다.

저장소 서비스는 잘못 된 식이 포함 된 모든 요청을 거부 합니다 (오류 코드 400 (잘못 된 요청)).

참고 항목

Blob Service 개념