[Network] MIME와 Content-Type

Song-YunMin·2021년 2월 10일
2

Network

목록 보기
7/9
post-thumbnail
post-custom-banner

HTTP 서버에 데이터를 보내기 위한 방법

HTTP 서버에 데이터를 보내기 위해선 여러가지 방법이 있습니다. 위에 언급된 Postman을 이용한 방법도 존재하며, 일반적인 개발과정을 진행할 때에는 소스코드에서 Framework 등을 이용하여 데이터를 보내는 방법이 있습니다.
오늘은 그 방법들을 사용하기 위한 사전 지식인 MIMEContent-Type 헤더에 대해 알아보겠습니다.

MIME (Multipurpose Internet Mail Extensions)

Content-Type을 이해하기 위해서는 먼저 MIME 를 이해하면 좋습니다.

MIME 는 Multipurpose Internet Mail Extensions의 약자로 파일 변환을 뜻합니다.

MIME는 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되었기 때문에 이름이 Internet Mail Extension 입니다. 그렇지만 현재는 웹을 통해서 여러형태의 파일을 전달하는데 쓰이고 있습니다.

MIME 사용 이유

MIME 를 사용하기 전에는 UUEncode 방식을 이용하고 있었으며, UUEncode에는 치명적인 단점이 있었는데, 이러한 단점을 보강하기 위하여 새로운 인코딩 방식이 등장했습니다. 이것을 MIME 라고 합니다.

이전에는 text 파일을 주고받는데에 ASCII 로 공통된 표준에 따르기만 하면 문제가 없었습니다. 하지만 네트워크를 통해 ASCII 파일이 아닌 바이너리 파일을 보내는 경우가 생기게 되었습니다. 바이너리 파일에는 음악파일, 무비파일, 워드파일 등등이 포함되어 있었습니다.

이러한 바이너리 파일을 ASCII 만으로 전송하기에는 무리가 뒤 따랐습니다. 바이너리 파일들을 기존의 시스템에서 문제 없이 전달하기 위해서는 텍스트파일로 변환이 필요하게 되었습니다.

MIME 으로 인코딩 한 파일은 Content-Type 정보를 파일의 앞부분에 담게 되며, Content-Type 은 여러가지의 타입이 있습니다.

특정 Content-Type 은 파일을 웹서버로부터 전달 받아 웹브라우저에서 열 수 있기도 하고, 열 수 없기도 합니다.

이유는 예를들어 웹 브라우저에서 서버에 접속하여 html 문서를 요청하면서 html 문서에 있는 이미지 파일의 경로를 불러올 수 있다고 한다면, 이러한 과정에서 이미지의 경로에 있는 파일이 웹브라우저에서 지원되는 MIME Type이라면 웹 브라우저를 이용하여 열어볼 수 있습니다.

바이너리 파일도 마찬가지 입니다. 주로 쓰고 있는 대부분의 포맷인 .gif, .jpg, .mov 등등의 파일들은 웹 브라우저에서 무리 없게 열리게 되는데 브라우저에서 지원하지 못하는 유형은 따로 지정을 해주어야 합니다.

Content-Type이란 무엇인가?

우리가 클라이언트 브라우저로 어떤 자원을 보낼때 (어떤 형태의 파일이나 문서 등), 웹 서버는 일련의 HTTP 헤더로 파일이나 자원을 포함하는 바이트의 Stream 을 앞에 보냅니다. 이런 헤더는 헤더는 클라이언트에게 웹 서버와 커뮤니케이션을 할 수 있는 세부사항을 담고 있습니다. 예를 들어, 헤더는 사용되고 있는 웹 서버의 소프트웨어 타입, 서버의 날짜와 시간, HTTP 프로토콜, 사용중인 Connection Type 등을 지정합니다. 또한 헤더는 클라이언트가 도메인에 대해서 저장해야 할 쿠키를 포함합니다.

이와 관련해서 가장 중요한 것은 헤더는 보내지는 자원의 content 타입을 포함하는 것입니다. 이것은 Content-Type 헤더에 의해 지정되는데, 이 값은 표준 MIME-Type 중 하나입니다. 우리는 MIME-Type 을 살펴봄으로써, 브라우저가 데이터를 나타낼 때 어떤 종류의 파일 Stream 인지를 알고 나타낸다는 것을 인지해야 합니다. HTML 페이지에서 표준 MIME 는 "text/html 입니다. 그리고 텍스트 파일이나 텍스트 stream은 "text/text" 입니다.

Reference

MIME-Type,Content-Type이란?

profile
고독한 서버 개발 3년차
post-custom-banner

0개의 댓글