HTTP를 이용해서 뭔가를 하려면
꼭 빠지지 않고 나오는 게 MIME와 Content-type입니다.

한번은 꼭 짚고 넘어가야 될거 같아 정리해 보았습니다.
■ MIME
Multipurpose Internet Mail Extensions의 약자이며
처음 MIME는 용어 그대로의 의미로써
이메일을 보낼 때 함께 보내지는 첨부파일을
텍스트 문서로 변환해서 전송하기 위해 개발되었습니다.
현재는 HTTP 프로토콜을 이용한 웹에서
서버가 클라이언트에게 보내준 문서의 종류들을 정의한 걸로 사용되고 있습니다.

■ Content-Type
HTTP 해더에는 메시지 전송시에 사용되는 여러가지 정보들이 표시되어 있습니다.
여러 정보들 중에 하나로 Content-Type이 있습니다.
Date라는 항목은 메시지가 생성되는 시간이 표시되어 있고
Date: Wed, 04 Aug 2021 11:17:17 GMT
Content-Length라는 항목은 메시지를 Byte 단위로 표시됩니다.
Content-Length: 23770
Content-Type은 MIME 타입으로 변환된 문서의 종류를 알리는 항목입니다.
Content-Type: text/html; charset=utf-8
웹브라우저 크롬을 이용해서 F12(개발자 도구)로 HTTP 해더에 대한
자세한 정보들을 볼 수 있습니다.
예를 들어 저의 티스토리를 F12로 확인해 봤습니다.
오른쪽 아래 Content-Type : text/html 로 표시된 걸 볼 수 있죠.

■ HTTP에서 왜 MIME와 Content-Type 중요할까요?
http.xls 파일이 있습니다.
이 파일의 확장자 xls만 보더라도 엑셀파일이란 걸 알 수 있죠.
파일을 더블 클릭하면 자동으로 엑셀이 실행되고
파일 내용이 엑셀 문서로 보이게 될 거예요.
하지만 HTTP 웹에서는 확장자라는 건 없습니다.
클라이언트 웹브라우저는
웹서버로부터 여러 가지 리소스(문서나 파일, 메시지 등..)를 응답받았을 때
이 리소스가 뭔지 해석할 수가 없어 어떤 동작을 해야 될지 결정할 수가 없습니다.
이를 해결하기 위해 웹서버는
HTTP 응답 해더에 Content-Type 항목을 두고
이 리소스가 MIME 타입 중에 어떤 타입인지 기록해서 보내고
웹브라우저는 각각의 리소스에 기록된 Content-Type 항목을 체크해서
타입에 맞는 기본 동작을 수행하고 웹브라우저에 표시하게 됩니다.
Content-Type는 웹 리소스의 확장자 역할을 합니다.
▩ 문법
예) Content-Type: text/html; charset=utf-8
text/html → Type/subType 의미
charset → 메시지 문자 인코딩 . utf-8
웹에서 주고 받을수 있는 리소스의 종류가 다양합니다.
너무 많아서 크게 5가지로 분류(Type)하고 세부적(subType)으로 나눴습니다.
● Type
| 타입 | 설명 | 예시 |
| text | 텍스트를 포함하는 모든 문서를 나타내며 이론상으로는 인간이 읽을 수 있어야 합니다 | text/plain text/html text/css text/javascript |
| image | 모든 종류의 이미지를 나타냅니다. (animated gif처럼) 애니메이션되는 이미지가 이미지 타입에 포함되긴 하지만, 비디오는 포함되지 않습니다. | 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 |
● subType ...
일반적인 파일종류와 MIME 타입 매핑
| 파일 확장자 | 파일 설명 | MIME 타입 |
| .aac | AAC 오디오 | audio/aac |
| .abw | 아비워드 문서 | application/x-abiword |
| .arc | 문서 보관(여러 파일 포함) | application/x-freearc |
| .avi | AVI: 오디오 비디오 인터리브 | video/x-msvideo |
| .azw | 아마존 킨들 전자책 형식 | application/vnd.amazon.ebook |
| .bin | 모든 종류의 바이너리 데이터 | application/octet-stream |
| .bmp | Windows OS/2 비트맵 그래픽 | image/bmp |
| .bz | BZip 아카이브 | application/x-bzip |
| .bz2 | BZip2 아카이브 | application/x-bzip2 |
| .cda | CD 오디오 | application/x-cdf |
| .csh | C-쉘 스크립트 | application/x-csh |
| .css | CSS(Cascading Style Sheet) | text/css |
| .csv | 쉼표로 구분된 값(CSV) | text/csv |
| .doc | 마이크로 소프트 워드 | application/msword |
| .docx | 마이크로소프트 워드(OpenXML) | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| .eot | MS Embedded OpenType 글꼴 | application/vnd.ms-fontobject |
| .epub | 전자 출판(EPUB) | application/epub+zip |
| .gz | GZip 압축 아카이브 | application/gzip |
| .gif | 그래픽 교환 형식(GIF) | image/gif |
| .htm .html |
하이퍼텍스트 마크업 언어(HTML) | text/html |
| .ico | 아이콘 형식 | image/vnd.microsoft.icon |
| .ics | iCalendar 형식 | text/calendar |
| .jar | 자바 아카이브(JAR) | application/java-archive |
| .jpeg .jpg |
JPEG 이미지 | image/jpeg |
| .js | 자바스크립트 | text/javascript |
| .json | JSON 형식 | application/json |
| .jsonld | JSON-LD 형식 | application/ld+json |
| .mid .midi |
악기 디지털 인터페이스(MIDI) | audio/midi audio/x-midi |
| .mjs | 자바스크립트 모듈 | text/javascript |
| .mp3 | MP3 오디오 | audio/mpeg |
| .mp4 | MP4 오디오 | video/mp4 |
| .mpeg | MPEG 비디오 | video/mpeg |
| .mpkg | Apple 설치 프로그램 패키지 | application/vnd.apple.installer+xml |
| .odp | OpenDocument 프레젠테이션 문서 | application/vnd.oasis.opendocument.presentation |
| .ods | OpenDocument 스프레드시트 문서 | application/vnd.oasis.opendocument.spreadsheet |
| .odt | OpenDocument 텍스트 문서 | application/vnd.oasis.opendocument.text |
| .oga | OGG 오디오 | audio/ogg |
| .ogv | OGG 비디오 | video/ogg |
| .ogx | OGG | application/ogg |
| .opus | 오푸스 오디오 | audio/opus |
| .otf | 오픈타입 글꼴 | font/otf |
| .png | 휴대용 네트워크 그래픽 | image/png |
| 어도비 벽돌 휴대용 문서 형식 (PDF) | application/pdf | |
| .php | 하이퍼텍스트 전처리기( 개인 홈 페이지 ) | application/x-httpd-php |
| .ppt | 마이크로 소프트 파워 포인트 | application/vnd.ms-powerpoint |
| .pptx | 마이크로소프트 파워포인트(OpenXML) | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| .rar | RAR 아카이브 | application/vnd.rar |
| .rtf | 서식 있는 텍스트 형식(RTF) | application/rtf |
| .sh | Bourne 쉘 스크립트 | application/x-sh |
| .svg | 확장 가능한 벡터 그래픽(SVG) | image/svg+xml |
| .swf | 작은 웹 형식 (SWF) 또는 Adobe Flash 문서 | application/x-shockwave-flash |
| .tar | 테이프 아카이브(TAR) | application/x-tar |
| .tif .tiff |
태그가 지정된 이미지 파일 형식(TIFF) | image/tiff |
| .ts | MPEG 전송 스트림 | video/mp2t |
| .ttf | 트루타입 글꼴 | font/ttf |
| .txt | 텍스트(일반적으로 ASCII 또는 ISO 8859-n) | text/plain |
| .vsd | 마이크로소프트 비지오 | application/vnd.visio |
| .wav | 파형 오디오 형식 | audio/wav |
| .weba | 웹엠오디오 | audio/webm |
| .webm | 웹엠 비디오 | video/webm |
| .webp | 웹페이지 이미지 | image/webp |
| .woff | 웹 오픈 글꼴 형식(WOFF) | font/woff |
| .woff2 | 웹 오픈 글꼴 형식(WOFF) | font/woff2 |
| .xhtml | XHTML | application/xhtml+xml |
| .xls | 마이크로 소프트 엑셀 | application/vnd.ms-excel |
| .xlsx | 마이크로소프트 엑셀(OpenXML) | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| .xml | XML | application/xml text/xml |
| .xul | XUL | application/vnd.mozilla.xul+xml |
| .zip | ZIP 아카이브 | application/zip |
| .3gp | 3GPP 오디오/비디오 컨테이너 | video/3gpp audio/3gpp |
| .3g2 | 3GPP2 오디오/비디오 컨테이너 | video/3gpp2 audio/3gpp2 |
| .7z | 7-zip 보관소 | application/x-7z-compressed |
만약에 MIME 타입에 없는 타입을 사용하게 된다면
웹브라우저는 기본 동작을 허용하지 않게 되고
강제로 파일로 저장하게 하는 액션을 취하게 됩니다.
그리고
서브타입은 없는 텍스트 타입을 사용할 때는 text/plain를 사용하고
알려진 MIME 타입을 없을 경우에는
이진 문서로 인식하게 application/octet-stream를 사용해야 됩니다.
MIME 타입 출처 : MDN Web DOCS 참고
Common MIME types - HTTP | MDN
Here is a list of MIME types, associated by type of documents, ordered by their common extensions.
developer.mozilla.org
감사합니다.
'IT > IT 지식' 카테고리의 다른 글
| 유튜브 음악 MP3 음원추출에 탁월한 4K YouTube To MP3 사용법 (0) | 2021.08.15 |
|---|---|
| 지겨운 유튜브 추천 맞춤동영상 알고리즘 삭제 초기화 방법 (1) | 2021.08.10 |
| REST와 REST API란 . RESTful 개념 쉽게 이해하기 (2) | 2021.08.05 |
| 내 컴퓨터 중고 가격 얼마나 할까? 부품별 중고 가격 (0) | 2021.07.12 |
| 내 컴퓨터 사양 간단히 확인 하기 . CPU VGA 메인보드 메모리 .. (0) | 2021.07.07 |
댓글