MIME(Multipurpose Internet Mail Extensions)은 다목적 인터넷 메일 확장이라는 뜻으로, 전자우편의 데이터 형식을 정의한 표준 포맷이다. MIME type은 ASCII 코드만 전송할 수 있었던 전자우편으로 이미지, 동영상, 엑셀 등의 바이너리 데이터를 주고받기 위해 개발되었는데, 현재는 HTTP 통신에서 데이터 형식을 식별하기 위해 사용된다.
개발자 도구를 실행하면 위와 같이 데이터별로 헤더를 확인할 수 있는데, 그 중 content-type이 MIME 타입이다. 선택된 데이터의 MIME 타입은 image/png
이다.
MIME 타입은 타입(type)과 서브타입(subtype)이 슬래시(/
)로 구분되어 구성된다.
대소문자를 구분하지는 않지만 일반적으로 소문자로 쓰여지며, 사이에 whitespace는 허용되지 않는다.
type/subtype
타입 | 설명 | 일반적인 서브타입 예시 |
---|---|---|
text | 텍스트를 포함하는 모든 문서를 표현 | text/plain, text/html, text/css, text/javascript |
image | 모든 종류의 이미지를 표현 | image/gif, image/png, image/jpeg, image/bmp, image/webp |
audio | 모든 종류의 오디오 파일을 표현 | audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav |
video | 모든 종류의 비디오 파일을 표현 | video/webm, video/ogg |
application | 모든 종류의 이진 데이터를 표현 | application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf |
multipart | 여러가지 타입의 데이터들을 동시에 전송할 때 사용 | multipart/form-data, multipart/byteranges |
특정 서브타입이 없는 텍스트 문서에서는 text/plain
가 사용되어야 하고, 특정한 서브타입 혹은 알려진 서브타입이 없는 이진 데이터 문서에서는 application/octet-stream
이 사용되어야 한다.
브라우저는 파일 확장자가 아닌 MIME 타입을 사용하여 URL을 어떻게 처리할지 결정하므로 웹 서버가 response의 Content-Type 헤더에 올바른 MIME 타입을 보내는 것이 중요하다. 올바르게 설정하지 않으면 브라우저가 파일 내용을 잘못 해석하고 사이트가 올바르게 작동하지 않으며, 다운로드한 파일을 잘못 처리할 수 있다.
이렇게 MIME 타입이 잘못 설정되거나 없는 경우 브라우저는 MIME 스니핑을 수행할 수 있다. MIME 스니핑이란 리소스를 보고 올바른 MIME 타입을 추측하는 것이다. 서버는 X-Content-Type-Options 헤더를 전송하여 MIME 스니핑을 방지할 수 있다.
참고 자료
MDN MIME types