문제상황
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 상태 메시지와 함께 사용
'DevOps > IIS' 카테고리의 다른 글
[IIS] IIS 서버에 가상 디렉터리 추가하기 (0) | 2021.11.02 |
---|