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 참고
감사합니다.
'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 |
댓글