[HTTP] MIME Type

Lian Kim·2022년 8월 30일
0

MIME(Multipurpose Internet Mail Extensions)은 다목적 인터넷 메일 확장이라는 뜻으로, 전자우편의 데이터 형식을 정의한 표준 포맷이다. MIME type은 ASCII 코드만 전송할 수 있었던 전자우편으로 이미지, 동영상, 엑셀 등의 바이너리 데이터를 주고받기 위해 개발되었는데, 현재는 HTTP 통신에서 데이터 형식을 식별하기 위해 사용된다.

개발자 도구를 실행하면 위와 같이 데이터별로 헤더를 확인할 수 있는데, 그 중 content-type이 MIME 타입이다. 선택된 데이터의 MIME 타입은 image/png 이다.



MIME 타입의 구조

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이 사용되어야 한다.


  • application/octet-stream
    8비트 단위의 바이너리 데이터를 의미한다. 특정한 서브타입 혹은 알려진 서브타입이 없는 이진 데이터 문서의 경우 기본값으로 octet-stream을 사용한다.
  • multipart/form-data
    HTML Form의 값을 브라우저에서 서버로 전송할 때 사용한다.



MIME sniffing

브라우저는 파일 확장자가 아닌 MIME 타입을 사용하여 URL을 어떻게 처리할지 결정하므로 웹 서버가 response의 Content-Type 헤더에 올바른 MIME 타입을 보내는 것이 중요하다. 올바르게 설정하지 않으면 브라우저가 파일 내용을 잘못 해석하고 사이트가 올바르게 작동하지 않으며, 다운로드한 파일을 잘못 처리할 수 있다.

이렇게 MIME 타입이 잘못 설정되거나 없는 경우 브라우저는 MIME 스니핑을 수행할 수 있다. MIME 스니핑이란 리소스를 보고 올바른 MIME 타입을 추측하는 것이다. 서버는 X-Content-Type-Options 헤더를 전송하여 MIME 스니핑을 방지할 수 있다.




참고 자료
MDN MIME types

0개의 댓글