요약

  • RFC 3023은+xml규약을 도입하여, 수신자가 서로 다른 여러 미디어 타입 아래에 공통의 XML 기반이 있음을 인식하고 적절한 경우 범용 XML 도구를 사용할 수 있도록 했습니다.
  • 접미사는 미디어 타입을 통합하지도, 애플리케이션 의미를 담지도 않았습니다. 유효한 XML 여부, 어휘 수용, 보안 정책, 권한 부여, 관찰된 결과는 여전히 별개의 결정이었습니다.

2001년 1월, XML은 단순히 “XML 문서” 이상의 프로토콜로 확산되고 있었습니다. 상거래 메시지, 벡터 그래픽, 구성 형식이 모두 꺾쇠 괄호 문법을 사용하면서도 서로 다른 소프트웨어와 서로 다른 규칙을 요구할 수 있었습니다. 이 모든 것을application/xml로 표기하면 문법은 보존되지만 애플리케이션 계약은 사라집니다. 각각에 완전히 불투명한 이름을 붙이면 계약은 보존되지만, 범용 XML 기계가 여전히 내용을 들여다볼 수 있다는 유용한 사실이 가려집니다.

RFC 3023은 이 두 요구 사이에 작은 연결부를 넣었습니다. 특정 미디어 서브타입은 자신의 정체성을 유지하면서+xml로 끝날 수 있었습니다. 접미사 앞의 문자들이 형식을 명명했고, 마지막 네 문자가 기저 표현을 드러냈습니다.

이 규약은 의도적으로 절제되어 있었습니다. 문법이 의미라고 속이지 않으면서도 문법을 발견 가능하게 만들었습니다.

하나의 레이블이 두 층위의 지식을 담았다

전체 값application/foo+xml은 하나의 등록된 미디어 타입이었지, 자동 권한의 스택이 아니었습니다. 정확한 타입을 이해하는 수신자는foo고유의 표시, 편집, 검증 또는 런타임 동작을 적용할 수 있었습니다.foo는 이해하지 못하지만 XML은 이해하는 수신자는 접미사를 인식하고 구문 분석, 서식 지정, 검색, 변환 같은 범용 처리가 적절한지 판단할 수 있었습니다.

그 두 번째 경로가 혁신이었습니다. RFC 3023은 수신자가 끊임없이 늘어나는 XML 어휘 목록을 유지하는 대신 서브타입의 마지막 네 문자를 검사할 수 있다고 지적했습니다. 또한 배포된 MIME 디스패치와 맞지 않는 대안들을 배제했습니다. 파라미터는 표현의 성격을 나타내기에 불변성이 부족했고, 많은 디스패처는 파라미터로 라우팅하지 않았습니다. 새 최상위 미디어 타입은 기존 아키텍처를 흔들었을 것입니다. 접미사는 가장 작은 공유 사실을 담았습니다.

그러나 전체 미디어 타입은 여전히 결정적이었습니다. RFC의 부록은 XML을 인식하지 못하는 프로세서가+xml을 불투명한 것으로 취급하며, 접미사가 나타났다는 이유만으로 추가 의미를 부여할 수 없다고 명시했습니다.application/foo와application/foo+xml은 독립적인 타입이었습니다. XML 버전은 다른 문법과 새로운 의미를 가질 수 있었고, 하나에 대한 지원이 다른 하나에 대한 지원을 약속하지 않았습니다.

파서 영수증은 어휘 의미 앞에서 멈췄다

게이트웨이가+xml로 끝나는 타입을 수신한다고 가정해 봅시다. 접미사 인식은 하나의 한정된 추론을 지지합니다: 발신자가 이 표현을 XML 기반으로 표기했다는 것입니다. XML 프로세서를 실행하면 다음 사실을 검사할 수 있습니다: 수신된 바이트가 적용 가능한 인코딩 규칙에 따라 XML을 이루는지 여부입니다.

이 어느 관찰도 어휘가 이해되었음을 입증하지 못합니다.transfer,delete,permit이라는 이름의 요소는 XML 파서가 트리를 만들었다는 이유만으로 작동력을 갖지 않습니다. 네임스페이스 규칙, 스키마 또는 애플리케이션 코드가 이를 거부할 수 있습니다. 서명이 구문상 존재하지만 검증되지 않았을 수 있습니다. 유효한 서명자가 요청된 작업에 대한 권한이 없을 수 있습니다. 허용된 작업이 그 결과가 확정되기 전에 실패할 수 있습니다.

이 층위적 독해는 보안 실수도 막습니다. 범용 구문 분석은 외부 엔티티를 해석하거나, 네트워크 자원을 가져오거나, 스타일시트를 실행하거나, 무제한으로 메모리를 할당하라는 일괄 지시가 아닙니다. 이것들은 각자의 위험을 지닌 로컬 기능입니다. 접미사는 가능한 구문 경로를 여는 것이지 신뢰 정책을 선택하는 것이 아닙니다.

이후 표준들은 경계를 더 명확하게 만들었다

RFC 6838은 구조화 구문 접미사를 미디어 타입 등록 아키텍처에 넣었습니다. 마지막 플러스 뒤의 문자들은 고립된 XML 규약이 아니라 등록된 구문 접미사가 되었습니다. RFC 6839는+xml을 정식 등록하고 두 가지 동시 처리 층위를 설명했습니다: 특수 처리를 위한 정확한 타입 의미, 그리고 특수 의미가 불필요하고 기저 형식을 구문 분석하는 데 추가 지식이 필요 없을 때의 범용 표현 처리입니다.

RFC 7303은 이후 RFC 3023을 대체하면서 원칙을 유지했습니다. 새로운 XML 기반 미디어 타입은 범용 XML 처리가 부적절하지 않는 한 일반적으로+xml을 사용해야 합니다. 수신자는 접미사를 감지하고, XML 프로세서를 실행해 그 주장을 검증하고, 그에 따라 진행할 수 있습니다. 특정 미디어 타입은 여전히 자체적인 표시, 편집, 보안, 런타임, 프래그먼트 규칙을 부과할 수 있습니다.

현재 IANA 레지스트리는 이 설계를 드러냅니다.+xml은 자체 구조화 접미사 항목을 가지며, 미디어 타입 레지스트리에는 이것으로 끝나는 수많은 별개의 서브타입이 들어 있습니다. 공통의 끝부분은 공유 표현 계열을 기록하고, 서로 다른 이름들은 문서들이 상호 교환 가능하지 않음을 기록합니다.

출처

Lu Heng은 RFC 3023을 저작하거나 승인하지 않았습니다. 그의 에세이는 이곳에서 공개된 분석적 관점으로 사용되었습니다.