다음을 통해 공유


블롭 서비스 연산에 조건부 헤더 지정하기

여러 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 이후 블롭 서비스 읽기 연산에 조건부 헤더를 지정하기

버전 2013-08-15부터는 Get BlobGet Blob Properties 가 여러 조건부 헤더를 지원합니다. 지원되는 조건부 헤더의 조합을 자유롭게 지정할 수 있습니다. Blob 서비스는 이러한 조건을 다음과 같은 식에 따라 평가합니다:

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

또한 와 If-None-MatchIf-Match 대해 여러 개의 쉼표 구분 값을 제공할 수도 있습니다. 에 대해 여러 값을 If-Match지정하면, Blob 서비스는 전체 표현식을 평가하기 전에 제공된 모든 값에 대해 논리적 OR 연산을 수행합니다. 에 대해 여러 값을 if-None-Match지정하면, 서비스는 전체 표현식을 평가하기 전에 논리적 AND 연산을 수행합니다. 와 If-Unmodified-SinceIf-Modified-Since 대해 여러 값을 지정하면 지원되지 않아 오류 코드 400(Bad Request).

이 기능은 HTTP/1.1 규격을 준수하기 위해 활성화되었습니다. 또한 콘텐츠 전달 네트워크(CDN)나 프록시 서버가 인플라이트 요청에 추가 조건부 헤더를 추가하는 상황에도 대응합니다. 다음 예시들은 여러 가지 조건부 헤더 조합을 보여줍니다.

예제 1:

그리고 헤더를 포함하는 If-MatchIf-Modified-SinceGet Blob 요청을 생각해 보세요. 다음 표는 헤더를 개별적으로 평가했을 때의 결과를, 두 헤더를 함께 평가했을 때의 결과를 나타냅니다.

조건부 헤더 개별 평가 시 결과입니다 복합 평가 시 결과
If-Match 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Modified-Since 200(OK) 412 (전제 조건 실패)
If-Match 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Modified-Since 304 (수정되지 않음) 412 (전제 조건 실패)
If-Match 200(OK) 200(OK)
If-Modified-Since 200(OK) 200(OK)
If-Match 200(OK) 304 (수정되지 않음)
If-Modified-Since 304 (수정되지 않음) 304 (수정되지 않음)

예제 2:

헤더 If-Modified-Since 를 포함하는 If-None-Match 요청을 고려해 봅시다.

조건부 헤더 개별 평가 시 결과입니다 복합 평가 시 결과
If-None-Match 304 (수정되지 않음) 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 (수정되지 않음) 200(OK)
If-None-Match 304 (수정되지 않음) 304 (수정되지 않음)
If-Modified-Since 304 (수정되지 않음) 304 (수정되지 않음)

예 3:

, 헤더를 포함하는 If-Modified-SinceIf-MatchIf-Unmodified-Since 요청을 고려해 봅시다.

조건부 헤더 개별 평가 시 결과입니다 복합 평가 시 결과
If-Modified-Since 200(OK) 412 (전제 조건 실패)
If-Match 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Unmodified-Since 200(OK) 412 (전제 조건 실패)
If-Modified-Since 200(OK) 412 (전제 조건 실패)
If-Match 200(OK) 412 (전제 조건 실패)
If-Unmodified-Since 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Modified-Since 304 (수정되지 않음) 412 (전제 조건 실패)
If-Match 200(OK) 412 (전제 조건 실패)
If-Unmodified-Since 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Modified-Since 304 (수정되지 않음) 304 (수정되지 않음)
If-Match 200(OK) 304 (수정되지 않음)
If-Unmodified-Since 200(OK) 304 (수정되지 않음)

예시 4:

, 헤더를 포함하는 If-Modified-SinceIf-None-MatchIf-Unmodified-SinceIf-Match 요청을 고려해 봅시다.

조합 개별 HTTP 상태 코드 블롭 상태 결과 보기
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 (전제 조건 실패)
If-None-Match 304 (수정되지 않음) 412 (전제 조건 실패)
If-Unmodified-Since 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Match 200(OK) 412 (전제 조건 실패)
If-Modified-Since 200(OK) 200(OK)
If-None-Match 304 (수정되지 않음) 200(OK)
If-Unmodified-Since 200(OK) 200(OK)
If-Match 200(OK) 200(OK)
If-Modified-Since 304 (수정되지 않음) 412 (전제 조건 실패)
If-None-Match 200(OK) 412 (전제 조건 실패)
If-Unmodified-Since 200(OK) 412 (전제 조건 실패)
If-Match 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Modified-Since 304 (수정되지 않음) 412 (전제 조건 실패)
If-None-Match 200(OK) 412 (전제 조건 실패)
If-Unmodified-Since 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Match 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Modified-Since 304 (수정되지 않음) 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 (수정되지 않음) 412 (전제 조건 실패)
If-None-Match 304 (수정되지 않음) 412 (전제 조건 실패)
If-Unmodified-Since 412 (전제 조건 실패) 412 (전제 조건 실패)
If-Match 200(OK) 412 (전제 조건 실패)

2013-08-15 이전 버전에서는 읽기 작업을, 모든 버전에서는 쓰기 작업에 조건부 헤더를 지정하세요.

2013-08-15 이전 버전에서 Blob 서비스 읽기 연산(Get BlobGet Blob Properties)을 호출할 때, 그리고 버전에 관계없이 모든 쓰기 연산을 호출할 때는 다음 사항들을 염두에 두세요:

  • 만약 요청이 와 If-Modified-Since 헤더를 모두 If-None-Match 지정하면, 에 명시If-None-Match된 기준에 따라 요청이 평가됩니다.

  • 만약 요청이 와 If-Unmodified-Since 헤더를 모두 If-Match 지정하면, 에 명시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-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
URL에서 차단 추가하기

(버전 2018-11-09 이후 버전)
작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Blob 복사 읽기 및 쓰기 목적지 블롭의 조건에 대해:

- 만약 수정-이후(if-modified-since

- 만약-수정되지 않은-이후(if-modified-since

- 이약 일치

- 만약 매치가 안 된다면

- x-ms-if-태그

소스 블롭에 대한 조건:

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

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

- x-ms-source-if-match(x-ms-source-if-match)

- x-ms-source-if-une-match(매칭 없음)

- x-ms-source-if-tags
Blob 삭제 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
컨테이너 삭제 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since
블롭을 잡아라 Read 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Blob 메타데이터 가져오기 Read 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Blob 속성 가져오기 Read 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Blob 태그 가져오기

Read x-ms-if-태그 (버전 2019-12-12 이후 버전)

블롭 조건(버전 2025-11-05 이후):

- x-ms-blob-if-modified-since

- x-ms-blob-if-수정되지 않은 것

- x-ms-blob-if-match가 일치한다면

- x-ms-blob-if-none-match가 없다면
차단 목록 받아 Read x-ms-if-태그
페이지 범위 가져오기 Read 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Blob 임대 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
컨테이너 임대 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since
URL에서 블롭을 넣기 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

소스 블롭에 대한 조건:

- x-ms-source-if-modified-Since

- x-ms-source-if-수정되지 않은-Since

- x-ms-출처-만약 일치

- x-ms-출처-만약 일치하지 않음

Blob 배치 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
URL 차단 설정하기

(버전 2018-03-28 이후 기준)
작성하다 x-ms-source-if-modified-Since

x-ms-source-if-수정되지 않은 것

x-ms-출처-만약 일치

x-ms-출처-만약 일치하지 않음
블릭리스트 넣기 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
페이지 배치 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
URL 중에서 페이지를 넣기

(버전 2018-11-09 이후 버전)
작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Blob 메타데이터 설정 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Blob 속성 설정 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
컨테이너 ACL 설정 작성하다 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since
Set Container Metadata 작성하다 만약 수정-이후(if-modified-since
Blob 태그 설정

작성하다 x-ms-if-태그 (버전 2019-12-12 이후 버전)

블롭 조건(버전 2025-11-05 이후):

- x-ms-blob-if-modified-since

- x-ms-blob-if-수정되지 않은 것

- x-ms-blob-if-match가 일치한다면

- x-ms-blob-if-none-match가 없다면
Blob 계층 설정 작성하다 x-ms-if-태그
스냅샷 블롭 Read 만약 수정-이후(if-modified-since

만약-수정되지 않은-이후(if-modified-since

이약 일치

만약 매치가 안 된다면

x-ms-if-태그
Set Blob 불변성 정책 작성하다 만약-수정되지 않은-이후(if-modified-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 (전제 조건 실패))

복사 작업

다음 표는 복사 작업일 때 각 조건부 헤더에 대해 미충족 조건에 대해 반환되는 응답 코드를 나타냅니다. Copy 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 값입니다. 이 헤더를 지정하여 술어가 블롭의 태그에 대해 평가할 때만 연 true 산을 수행하도록 지정하세요.
x-ms-source-if-tags 버전 2019-12-12 및 그 이후. 복사 블롭에만 적용됩니다. TagsPredicate 값입니다. 이 헤더를 지정하여 술어가 소스 블롭의 태그에 대해 평가할 때만 연 true 산을 수행하도록 지정하세요.

또는 조건부 헤더가 요청에 존재하고 로 TagsPredicate 평가하falsex-ms-if-tagsx-ms-source-if-tags, Blob 서비스는 해당 작업에 대해 오류 코드 412(전제조건 실패)를 반환합니다.

호출자는 OR x-ms-source-if-tags 조건부 헤더를 사용하려면 x-ms-if-tags 블롭의 태그를 읽을 권한이 있어야 합니다.

태그 술어 구문

Blob 서비스는 헤더 값 TagsPredicate 에 대한 ANSI SQL WHERE절 문법의 하위 집합을 지원합니다. 지원되는 연산자는 다음과 같습니다.

Operator 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')로 구분해야 합니다.

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

스토리지 서비스는 오류 코드 400(Bad Request)이 있는 유효하지 않은 표현식이 포함된 모든 요청을 거부합니다.

또한 참조하십시오

블롭 서비스 개념