MIME 타입에 대해 알아보겠습니다.
MIME
미디어 타입 (Multipurpose Internet Mail Extensions, MIME type)
- 문서, 파일 또는 바이트 집합의 성격과 형식을 나타냄
- 브라우저는 파일 확장자가 아닌 MIME 타입을 사용해 URL 처리 방법을 결정
- 웹 서버가 응답의
Content-Type
헤더에 올바른 MIME 타입을 보내는 것이 중요 - 그렇지 않으면 브라우저가 파일 내용을 잘못 해석해 사이트가 제대로 작동하지 않을 수 있음
MIME 타입의 구조
1
type/subtype
type
- 데이터 타입이 속하는 일반 카테고리
subtype
- MIME 타입이 나타내는 지정된 타입의 정확한 데이터 종류를 식별
- MIME 타입은 항상 타입, 하위 타입 둘 다 가짐
- 대소문자를 구분하지 않음
- 전통적으로 소문자
1
type/subtype;parameter=value
- 선택적 매개변수를 추가해 세부정보 제공
- 매개변수는 대소문자 구분 가능
타입
타입에는 discrete
, multipart
라는 두 가지 클래스 존재
discrete
- 단일 파일이나 매체를 나타내는 타입
- 단일 텍스트, 음악 파일, 단일 비디오
multipart
- 여러 컴포넌트 조각으로 구성된 문서를 나타내는 타입
- 각 부분은 고유한 개별 MIME 타입을 가질 수 있음
- 하나의 트랜잭션으로 함께 전송되는 여러 파일을 캡슐화 가능
- 이메일에 여러 파일을 첨부할 때
개별 타입
application
- 다른 타입 중 하나에 명시적으로 속하지 않는 모든 종류의 이진 데이터
- 어떤 방식으로든 실행되거나 해석될 데이터
- 또는 특정 어플리케이션이나 어플리케이션 범위를 사용해야 하는 이진 데이터
- 일반 이진 데이터는
application/octet-stream
- 또는 실제 타입을 알 수 없는 이진 데이터
- 특정 하위 타입이나 알려진 하위 타입이 없는 이진 데이터로 이루어진 문서의 경우
application/octet-stream
을 사용해야 함 application/pdf
,application/pkcs8
,application/zip
audio
- 오디오 또는 음악 데이터
audio/mpeg
,audio/vorbis
example
- MIME 타입을 사용하는 방법을 보여주는 예제에서, 자리 표시자로 사용하도록 예약됨
- 샘플 코드 목록 및 문서 외부에서 사용되면 안 됨
- 하위 타입으로도 사용 가능
font
- 글꼴, 서체 데이터
font/woff
,font/ttf
,font/otf
image
- 이미지
- 그래픽 데이터 애니메이션
- 정지 이미지 형식의 애니메이션
image/jpeg
,image/png
,image/svg+xml
model
- 3D 객체 또는 화면에 대한 모델 데이터
model/3mf
,model/vrml
text
- 텍스트 형식의 데이터를 가지는 텍스트 전용 데이터
- 특정 하위 타입이 없는 텍스트 문서의 경우
text/plain
을 사용해야 함 text/plain
,text/csv
,text/html
video
- 비디오 데이터 또는 파일
- MP4 영화(
video/mp4
) 등
Multipart 타입
- 다른 MIME 타입들을 지닌 개별적인 파트들로 나누어지는 문서의 그룹을 나타냄
- 이메일 시나리오
- 모두 동일한 파일의 일부이며 여러 개의 각각의 파일을 나타냄
- 복합 문서를 의미
HTTP는 다중부분 문서를 특별한 방식으로 처리하지 않음
- HTML Forms의 POST 메서드에서 사용되는
multipart/form-data
제외 - 문서 일부분을 보내기 위해
206
Partial Content
를 사용하는multipart/byteranges
제외
message
- 다른 메시지를 캡슐화하는 메시지
message/rfc822
,message/partial
multipart
- 개별적으로 서로 다른 MIME 타입을 가질 수 있는 여러 컴포넌트로 구성된 데이터
multipart/form-data
,multipart/byteranges
웹 개발자들을 위한 중요한 MIME 타입
application/octet-stream
- 이진 파일을 위한 기본값
- 실제로 ‘잘 알려지지 않은’ 이진 파일을 의미하는 타입
- 브라우저는 보통 자동으로 실행하지 않거나 실행해야 할지 묻기도 함
Content-Disposition
헤더가 값attachment
와 함께 설정되었고 ‘Save As’ 파일을 제안하는지 여부에 따라 브라우저가 그것을 다루게 됨
text/plain
- 텍스트 파일에 대한 기본값
- 실제로 ‘알려지지 않은’ 텍스트 파일일지라도 브라우저들은 그것을 보여줄 수 있다고 가정
- 모든 종류의 텍스트 데이터를 의미하지는 않음
text/css
- 웹 페이지를 그리는 CSS 파일들은
text/css
파일이 되어야만 함 - 서버가
.css
접미사를 가진 파일들을 CSS 파일이라고 인식하지 못하면 text/plain
또는application/octet-stream
MIME 타입으로 전송할 수도 있음- 이런 경우 대부분의 브라우저들이 CSS 파일이라고 인식하지 못해 무시됨
text/html
- 모든 HTML 컨텐츠는 이 타입과 함께 제공되어야 함
application/xml+html
과 같은 XHTML을 위한 대체 MIME 타입은 현재 사용되지 않음
text/javascript
- JavaScript 컨텐츠를 제공할 때 사용되어야 함
- 다른 MIME 타입을 사용하면 스크립트가 로드되거나 실행되지 않을 수 있음
이미지 타입
- 이미지 데이터가 포함된 파일
- 하위 타입은 데이터가 나타내는 특정 이미지 파일 형식을 지정
image/gif
,image/jpeg
,image/png
,image/webp
등
오디오와 비디오 타입
- HTML은
<audio>
,<video>
요소에 사용하기 위한 특정 파일 및 코덱 타입을 지원하도록 요구하지 않으므로 중요
multipart/form-data
- 브라우저에서 서버로 완성된 HTML Form의 내용을 전송 시 사용
- 다중부분 문서 형식
--
로 구분되는 다른 파트들로 구성- 각 파트는 그 자체로 개체이며 자신만의 HTTP 헤더를 가짐
- 파일 업로드 필드를 위한 헤더로
Content-Disposition
,Content-Type
이 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Content-Type: multipart/form-data; boundary=aBoundaryString
(other headers associated with the multipart document as a whole)
--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg
(data)
--aBoundaryString
Content-Disposition: form-data; name="myField"
(data)
--aBoundaryString
(more subparts)
--aBoundaryString--
multipart/byteranges
- 브라우저에 부분적 응답을 보내는 데 사용
206 Partial Content
상태 코드가 전송된 경우,- MIME 타입은 문서가 각각의 요청된 범위들 중 하나인 몇 가지 파트들로 구성되어 있음을 알려주기 위해 사용됨
- 다른 다중부분 타입처럼,
Content-Type
은 이 조각들을 분리하기 위해boundary
디렉티브를 사용 - 각각의 다른 파트들을 문서의 실제 타입을 가진
Content-Type
헤더와 그들이 나타내는 범위를 가진Content-Range
를 지님
정확한 MIME 타입 설정의 중요성
- 대부분의 웹 서버들은 기본 타입 중 하나인
application/octet-stream
MIME 타입을 사용해 알려지지 않은 타입의 리소스를 전송 - 보안상의 이유로, 대부분의 브라우저들은 그런 리소스에 대한 사용자 정의된 기본 동작 설정을 허용하지 않음
- 그것을 사용하려면 디스크에 저장해야 함
자주 발생하는 잘못된 서버 구성
- RAR로 인코딩된 파일
application/x-rar-compressed
를 전송하도록 서버를 구성
- 오디오 및 비디오
- 올바른 MIME 타입을 가진 리소스만
<video>
또는<audio>
요소에서 재생됨
- 올바른 MIME 타입을 가진 리소스만
- 독점 파일 형식
- 특정 타입을 사용하면 사용자가 선택한 소프트웨어에서 해당 파일을 자동으로 열 수 있음
MIME 스니핑
- MIME 타입이 없거나 브라우저가 MIME 타입이 올바르지 않다고 판단하는 경우
- 브라우저는 리소스의 바이트를 보고 올바른 MIME 타입을 추측하는 MIME 스니핑을 수행
- 각 브라우저는 서로 다른 상황에서 MIME 스니핑을 다르게 수행
- 서버는
X-Content-Type-Options
헤더를 전송하여 MIME 스니핑 방지
문서 타입을 전달하는 다른 방법
- MIME 타입이 문서 타입 정보를 전달하는 유일한 방법은 아님
- Microsoft Windows에서는 파일 이름 접미사가 사용되는 경우가 있음
- 매직 넘버. 다양한 형식의 구문을 사용하면 바이트 구조를 보고 파일 타입 추론 가능