Media-Type 협상
많은 애플리케이션 계층 인터넷 프로토콜은 MIME(다목적 인터넷 메일 확장)라는 간단하고 유연한 형식으로 메시지 교환을 기반으로 합니다. MIME는 전자 메일 메시지를 교환하기 위한 표준으로 시작되었지만 오늘날 다양한 애플리케이션에서 MIME 또는 미디어 형식으로 상호 이해되는 데이터 형식을 지정하는 데 사용됩니다. 이 프로세스를 미디어 형식 협상이라고 합니다.
미디어 형식은 형식 및 하위 형식(예: "text/plain" 또는 "text/HTML")을 나타내는 간단한 문자열입니다. 데이터에 레이블을 지정하거나 요청을 한정하는 데 사용됩니다. 예를 들어 웹 브라우저는 HTTP request-for-data 또는 request-for-info의 일부로 웹 서버가 적절한 미디어 형식을 반환하여 응답하는 "image/gif" 또는 "image/jpeg" 미디어 형식을 요청하도록 지정하고, 호출이 데이터 요청인 경우 요청된 형식의 데이터 자체를 지정합니다.
미디어 형식 협상은 사용자가 끌어서 놓기 작업 중에 IDataObject 포인터를 받을 때 편집/붙여넣기 또는 형식 쿼리를 선택할 때 붙여넣을 데이터 형식을 결정하기 위해 기존 데스크톱 애플리케이션이 시스템 클립보드와 협상하는 방식과 유사합니다. HTTP 미디어 형식 협상의 미묘한 차이점은 클라이언트가 서버에서 사용할 수 있는 형식을 미리 알지 못한다는 것입니다. 따라서 클라이언트는 가장 충실도의 순서로 지원하는 미디어 형식을 선행으로 지정하고 서버는 사용 가능한 최상의 형식으로 응답합니다.
URL 모니커에서는 인터넷 클라이언트와 서버가 BindToStorage 작업에서 데이터를 다운로드할 때 사용할 형식에 동의할 수 있는 방법으로 미디어 형식 협상을 지원합니다. 미디어 형식 협상을 지원하기 위해 클라이언트 는 IEnumFORMATETC 인터페이스를 구현하고 RegisterFormatEnumerator 함수를 호출하여 바인딩 컨텍스트에 등록합니다. 형식 열거자는 클라이언트가 허용할 수 있는 형식을 나열합니다. URL 모니커는 HTTP URL에 바인딩할 때 이러한 형식을 미디어 형식으로 변환합니다.
클라이언트에서 요청한 가능한 미디어 형식은 바인딩 컨텍스트에서 호출자가 등록한 IEnumFORMATETC 열거자에서 사용할 수 있는 FORMATETC 구조를 통해 URL 모니커로 표시됩니다. 각 FORMATETC는 미디어 형식을 식별하는 클립보드 형식을 지정합니다. 예를 들어 다음 코드 조각은 미디어 형식이 PostScript임을 지정합니다.
FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .
클라이언트는 클립보드 형식을 특수 미디어 형식 CF_NULL 설정하여 URL이 가리키는 리소스의 기본 미디어 형식을 검색해야 함을 나타낼 수 있습니다. 이 형식은 일반적으로 클라이언트에 관심이 있는 마지막 형식입니다. 바인딩 컨텍스트에 열거자가 등록되지 않은 경우 URL 모니커는 cfFormat=CF_NULL 포함된 단일 FORMATETC를 포함하는 열거자를 사용할 수 있는 것처럼 작동하여 기본 미디어 형식을 자동으로 다운로드합니다.
어떤 미디어 형식을 사용하든 클라이언트는 IBindStatusCallback::OnDataAvailable 메서드에 대한 pformatetc 인수를 통해 선택 사항을 알림을 받습니다. 콜백은 클라이언트가 BindToStorage를 호출한 컨텍스트 내에서 발생합니다.
참고
수신된 콘텐츠가 인식할 수 없는 미디어 형식인 경우 클라이언트는 자동으로 RegisterMediaTypes 를 호출하여 새 형식을 등록합니다.
관련 항목