본문 바로가기
카테고리 없음

MIME type이란?

by 꼬마낙타 2019. 6. 6.
반응형

웹 컨텐츠를 다루면서 "MIME type"이라는 단어를 자주 접하게 된다. Mime은 "Multipurpose Internet Mail Extensions"의 약자로 파일 변환을 위한 포맷이다. 이름에서도 알 수 있듯이 MIME은 이메일에 첨부된 파일을 텍스트 문자 형태로 변환해서 이메일과 함께 전송하기 위해 개발된 포맷이다. MIME 이름의 Internet Mail Extension에서 본래의 의도를 알 수 있다. 

하지만 최근에는 이메일 뿐만 아니라 웹을 통해 전달되는 다양한 형태의 파일을 표현하기 위해 사용되고 있다.

 

MIME 타입은 현재 IANA(Internet Assigned Numbers Authority)라는 인터넷 할당 번호 관리기관에서 다양한 파일 타입을 표준화하여 MIME 타입으로 관리하고 있다. 현재까지 등록된 MIME 타입의 리스트는 IANA 웹 페이지에서 확인할 수 있다. (링크 : MIME 타입 리스트 - IANA)

 

웹 상에서 수 많은 문서와 파일들이 돌아다니기 때문에 MIME 타입의 전체리스트는 매우 길다. 또 한 새로운 타입의 파일이 계속 추가되기 때문에 MIME 타입도 계속 추가된다. 

 

문법

일반적으로 MIME 타입은 '타입/서브타입' 형태를 띈다.

type/subtype

'/' 문자로 구분된 두개의 타입으로 파일의 타입을 명시한다. 이 때, 타입 이름으로 공백 문자는 허용되지 않는다.  타입은 카테고리를 의미하며, 서브타입은 개별 혹은 멀티파트 타입이 될 수 있다.

 

MIME 타입 예제

타입 설명 서브타입
text 텍스트로 표현되는 모든 문서를 나타내며 인간이 읽을 수 있는 데이터를 의미한다.  text/plain, text/html, text/css, text/javascript ...
image 모든 종류의 이미지를 나타냄 image/jpeg, image/png, image/gif ...
audio 모든 종류의 오디오 파일들을 나타냄 audio/mpeg, audio/wav, audio/midi ...
video 모든 종류의 비디오 파일들을 나타냄 video/ogg, video/webm
application 모든 종류의 바이너리 데이터를 나타냄 application/xml, application/json, application/xhtml+xml, application/pdf ...

일반적으로 특정한 서브타입이 없는 경우 'text/plain'으로 사용하며 특정한 타입이 없는 바이너리 데이터의 경우 'application/octet-stream'을 사용한다. 

 

MIME 타입이 굉장히 다양한 포맷을 지원하긴 하지만 대부분은 그 중 일부만 사용하게 될 것이다. (예를 들어, xml, json 등) MIME 타입을 잘 이해하고 정확하게 사용해야 인코딩 및 디코딩시 잘 못된 형태로 변환하지 않게 된다.

 

MIME 스니핑

MIME 타입이 지정되지 않았을 경우 혹은 클라이언트가 타입이 잘 못 설정되었다고 판단한 경우 MIME 타입에 대한 스니핑을 시도할 수 있다. 전송 받은 데이터를 훑어보고 MIME 타입을 추측해내는 것이다.

 

이와 관련하여 서버에서 Content-Type 중 X-Content-Type-Options 를 전송하여 MIME 스니핑을 차단 할 수도 있다. MIME 스니핑은 보안관련 사항에서 문제를 일으킬 수 있기 때문이다.

반응형

댓글