Home MIME 타입에 대해 알아보기
Post
Cancel

MIME 타입에 대해 알아보기

MIME 타입에 대해 알아보겠습니다.

MIME

미디어 타입 (Multipurpose Internet Mail Extensions, MIME type)

  • 문서, 파일 또는 바이트 집합의 성격과 형식을 나타냄
  • 브라우저는 파일 확장자가 아닌 MIME 타입을 사용해 URL 처리 방법을 결정
  • 웹 서버가 응답의 Content-Type 헤더에 올바른 MIME 타입을 보내는 것이 중요
  • 그렇지 않으면 브라우저가 파일 내용을 잘못 해석해 사이트가 제대로 작동하지 않을 수 있음

MIME 타입의 구조

1
type/subtype
  • type
    • 데이터 타입이 속하는 일반 카테고리
  • subtype
    • MIME 타입이 나타내는 지정된 타입의 정확한 데이터 종류를 식별
  • MIME 타입은 항상 타입, 하위 타입 둘 다 가짐
  • 대소문자를 구분하지 않음
    • 전통적으로 소문자
1
type/subtype;parameter=value
  • 선택적 매개변수를 추가해 세부정보 제공
  • 매개변수는 대소문자 구분 가능

타입

타입에는 discrete, multipart라는 두 가지 클래스 존재

discrete

  • 단일 파일이나 매체를 나타내는 타입
  • 단일 텍스트, 음악 파일, 단일 비디오

multipart

  • 여러 컴포넌트 조각으로 구성된 문서를 나타내는 타입
  • 각 부분은 고유한 개별 MIME 타입을 가질 수 있음
  • 하나의 트랜잭션으로 함께 전송되는 여러 파일을 캡슐화 가능
    • 이메일에 여러 파일을 첨부할 때

개별 타입

application

  • 다른 타입 중 하나에 명시적으로 속하지 않는 모든 종류의 이진 데이터
  • 어떤 방식으로든 실행되거나 해석될 데이터
  • 또는 특정 어플리케이션이나 어플리케이션 범위를 사용해야 하는 이진 데이터
  • 일반 이진 데이터는 application/octet-stream
    • 또는 실제 타입을 알 수 없는 이진 데이터
  • 특정 하위 타입이나 알려진 하위 타입이 없는 이진 데이터로 이루어진 문서의 경우 application/octet-stream을 사용해야 함
  • application/pdf, application/pkcs8, application/zip

audio

  • 오디오 또는 음악 데이터
  • audio/mpeg, audio/vorbis

example

  • MIME 타입을 사용하는 방법을 보여주는 예제에서, 자리 표시자로 사용하도록 예약됨
  • 샘플 코드 목록 및 문서 외부에서 사용되면 안 됨
  • 하위 타입으로도 사용 가능

font

  • 글꼴, 서체 데이터
  • font/woff, font/ttf, font/otf

image

  • 이미지
  • 그래픽 데이터 애니메이션
  • 정지 이미지 형식의 애니메이션
  • image/jpeg, image/png, image/svg+xml

model

  • 3D 객체 또는 화면에 대한 모델 데이터
  • model/3mf, model/vrml

text

  • 텍스트 형식의 데이터를 가지는 텍스트 전용 데이터
  • 특정 하위 타입이 없는 텍스트 문서의 경우 text/plain을 사용해야 함
  • text/plain, text/csv, text/html

video

  • 비디오 데이터 또는 파일
  • MP4 영화(video/mp4) 등

Multipart 타입

  • 다른 MIME 타입들을 지닌 개별적인 파트들로 나누어지는 문서의 그룹을 나타냄
  • 이메일 시나리오
    • 모두 동일한 파일의 일부이며 여러 개의 각각의 파일을 나타냄
    • 복합 문서를 의미

HTTP는 다중부분 문서를 특별한 방식으로 처리하지 않음

  • HTML Forms의 POST 메서드에서 사용되는 multipart/form-data 제외
  • 문서 일부분을 보내기 위해 206 Partial Content를 사용하는 multipart/byteranges 제외

message

  • 다른 메시지를 캡슐화하는 메시지
  • message/rfc822, message/partial

multipart

  • 개별적으로 서로 다른 MIME 타입을 가질 수 있는 여러 컴포넌트로 구성된 데이터
  • multipart/form-data, multipart/byteranges

웹 개발자들을 위한 중요한 MIME 타입

application/octet-stream

  • 이진 파일을 위한 기본값
  • 실제로 ‘잘 알려지지 않은’ 이진 파일을 의미하는 타입
  • 브라우저는 보통 자동으로 실행하지 않거나 실행해야 할지 묻기도 함
  • Content-Disposition 헤더가 값 attachment와 함께 설정되었고 ‘Save As’ 파일을 제안하는지 여부에 따라 브라우저가 그것을 다루게 됨

text/plain

  • 텍스트 파일에 대한 기본값
  • 실제로 ‘알려지지 않은’ 텍스트 파일일지라도 브라우저들은 그것을 보여줄 수 있다고 가정
  • 모든 종류의 텍스트 데이터를 의미하지는 않음

text/css

  • 웹 페이지를 그리는 CSS 파일들은 text/css 파일이 되어야만 함
  • 서버가 .css 접미사를 가진 파일들을 CSS 파일이라고 인식하지 못하면
  • text/plain 또는 application/octet-stream MIME 타입으로 전송할 수도 있음
  • 이런 경우 대부분의 브라우저들이 CSS 파일이라고 인식하지 못해 무시됨

text/html

  • 모든 HTML 컨텐츠는 이 타입과 함께 제공되어야 함
  • application/xml+html과 같은 XHTML을 위한 대체 MIME 타입은 현재 사용되지 않음

text/javascript

  • JavaScript 컨텐츠를 제공할 때 사용되어야 함
  • 다른 MIME 타입을 사용하면 스크립트가 로드되거나 실행되지 않을 수 있음

이미지 타입

  • 이미지 데이터가 포함된 파일
  • 하위 타입은 데이터가 나타내는 특정 이미지 파일 형식을 지정
  • image/gif, image/jpeg, image/png, image/webp

오디오와 비디오 타입

  • HTML은 <audio>, <video> 요소에 사용하기 위한 특정 파일 및 코덱 타입을 지원하도록 요구하지 않으므로 중요

multipart/form-data

  • 브라우저에서 서버로 완성된 HTML Form의 내용을 전송 시 사용
  • 다중부분 문서 형식
  • --로 구분되는 다른 파트들로 구성
  • 각 파트는 그 자체로 개체이며 자신만의 HTTP 헤더를 가짐
  • 파일 업로드 필드를 위한 헤더로 Content-Disposition, Content-Type이 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Content-Type: multipart/form-data; boundary=aBoundaryString
(other headers associated with the multipart document as a whole)

--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg

(data)
--aBoundaryString
Content-Disposition: form-data; name="myField"

(data)
--aBoundaryString
(more subparts)
--aBoundaryString--

multipart/byteranges

  • 브라우저에 부분적 응답을 보내는 데 사용
  • 206 Partial Content 상태 코드가 전송된 경우,
  • MIME 타입은 문서가 각각의 요청된 범위들 중 하나인 몇 가지 파트들로 구성되어 있음을 알려주기 위해 사용됨
  • 다른 다중부분 타입처럼, Content-Type은 이 조각들을 분리하기 위해 boundary 디렉티브를 사용
  • 각각의 다른 파트들을 문서의 실제 타입을 가진 Content-Type 헤더와 그들이 나타내는 범위를 가진 Content-Range를 지님

정확한 MIME 타입 설정의 중요성

  • 대부분의 웹 서버들은 기본 타입 중 하나인 application/octet-stream MIME 타입을 사용해 알려지지 않은 타입의 리소스를 전송
  • 보안상의 이유로, 대부분의 브라우저들은 그런 리소스에 대한 사용자 정의된 기본 동작 설정을 허용하지 않음
  • 그것을 사용하려면 디스크에 저장해야 함

자주 발생하는 잘못된 서버 구성

  • RAR로 인코딩된 파일
    • application/x-rar-compressed를 전송하도록 서버를 구성
  • 오디오 및 비디오
    • 올바른 MIME 타입을 가진 리소스만 <video> 또는 <audio> 요소에서 재생됨
  • 독점 파일 형식
    • 특정 타입을 사용하면 사용자가 선택한 소프트웨어에서 해당 파일을 자동으로 열 수 있음

MIME 스니핑

  • MIME 타입이 없거나 브라우저가 MIME 타입이 올바르지 않다고 판단하는 경우
  • 브라우저는 리소스의 바이트를 보고 올바른 MIME 타입을 추측하는 MIME 스니핑을 수행
  • 각 브라우저는 서로 다른 상황에서 MIME 스니핑을 다르게 수행
  • 서버는 X-Content-Type-Options 헤더를 전송하여 MIME 스니핑 방지

문서 타입을 전달하는 다른 방법

  • MIME 타입이 문서 타입 정보를 전달하는 유일한 방법은 아님
  • Microsoft Windows에서는 파일 이름 접미사가 사용되는 경우가 있음
  • 매직 넘버. 다양한 형식의 구문을 사용하면 바이트 구조를 보고 파일 타입 추론 가능

참고

MIME 타입 (IANA 미디어 타입)

MIME

This post is licensed under CC BY 4.0 by the author.