DevOps/IIS

[IIS] MIME에 대하여...

eunoia07 2022. 2. 4. 16:26

문제상황


IIS 서버를 이용해 개발하다보니 특정 파일 업로드 시에 서버가 파일을 받지 못하는 상황이 발생 했습니다.

문제는 바로 MIME 문제였습니다.🔨

MIME이란?


Multipurpose Internet Mail Extensions의 약자로 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다. - MDN

 

 

기본적으로 E-mail(전자우편) 전송 프로토콜인 SMTP는 7비트 ASCII 문자만을 지원합니다.

그러나 ASCII 문자는 영어밖에 표현할 수 없기에 영어 이외의 언어로 쓰인 E-mail은 제대로 전송될 수 없었습니다. 이를 위해 탄생한 것이 MIME입니다.

 

MIME은 ASCII가 아닌 문자 인코딩을 이용해 영어가 아닌 다른 언어로 된 E-mail 또는 그림 등을 보낼 수 있는 방식을 정의합니다.

즉, e-mail을 위한 인터넷 표준 포맷인 것입니다.

 

[MIME 특징]

  - MIME은 메세지의 종류를 나타내는 Content-type, 메세지 인코딩 방식을 나타내는 content-transfer-encoding과 같은 추가적인 E-mail 헤더를 정의합니다.

  - 메세지를 MIME 형식으로 변환하는 것은 E-mail 프로그램이나 서버 상에서 자동으로 이루어집니다.

  - MIME은 확장가능합니다. MIME 표준은 새로운 Content-type과 또 다른 MIME 속성 값을 등록할 수 있는 방법을 정의하고 있습니다.

🤔MIME 사용하는 이유?


텍스트 파일 통신 시 ASCII 로 공통된 표준만 따르면 되지만 바이너리 파일을 보내는 경우 음악, 무비, 워드 등 ASCII만으로는 전송이 불가능 하여 바이너리 파일을 텍스트 파일로 변환하는 기술 필요합니다.

 

그래서 탄생하게 된 기술이 MIME 입니다.

(MIME가 문서 타입 정보 나르는 유일한 방법 아닌 웹(http)에서 MIME 타입만이 적절)

 

  - 인코딩(Encoding) : 바이너리 파일 → 텍스트 파일

  - 디코딩(Decoding) : 텍스트 파일 → 바이너리 파일

MIME 문법


MIME 타입의 구조는 매우 간단합니다.

type/subtype

  - / 로 구분된 두개의 문자열

      - 타입 type : 카테고리를 나타내며 개별, 멀티파트 타입

      - 서브 타입 subtype : 각각의 타입에 한정

        (쉽게 생각해서 타입파일의 종류, 서브 타입파일 포맷으로 표현합니다.)

  - 대소문자 구분하지는 않지만 전통적으로 소문자로 쓰여집니다.

  - 스페이스는 허용되지 않습니다.

타입 종류


  - 개별 타입

      - 문서의 카테고리를 가르킵니다.

  - 멀티파트 타입

      - 다른 MIME 타입들을 지닌 개별적인 파트들로 나누어지는 문서의 카테고리 가리킵니다.

      - 즉, 합성된 문서를 타나내는 방법이 됩니다.

[🐶개별 타입]

  - 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

[🐱멀티파트 타입]

멀티파트란 MIME Type들이 개별적인 파트로 나누어지는 문서에서 MIME Type들이 각 Type에 맞게 파트별로 나누어지는 것을 말합니다.

 

  - multipart/form-data

      - HTML Forms과 POST 메서드의 관계 속에서 사용

  - multipart/byteranges

      - 전체 문서의 하위 집합만 전송하기 위한 206 Partial Content 상태 메시지와 함께 사용