본문 바로가기
프론트엔드/HTTP - 후

MIME types (IANA media types)

by 5ub1n 2024. 10. 13.

MIME 유형 (IANA 미디어 유형)


미디어 유형(다용도 인터넷 메일 확장 Multipurpose Internet Mail Extensions types 또는 MIME 유형이라고도 함)은 문서, 파일, 바이트 모음의 특성과 형식을 나타낸다.

MIME 유형은 IETF의 RFC 6838에 정의되고 표준화되어 있다.

 

IANA(인터넷 할당 번호 관리 기관 Internet Assigned Numbers Authority)는 모든 공식 MIME 유형을 관리하며, 미디어 유형 페이지에서 가장 최신의 전체 목록을 찾을 수 있다.

 

경고 : 브라우저는 파일 확장자가 아닌 MIME 유형을 사용하여 URL 처리 방법을 결정하므로 웹 서버가 응답의 Content-Type 헤더에 올바른 MIME 유형을 보내는 것이 중요하다.

이것이 올바르게 구성되지 않으면 브라우저가 파일 내용을 잘못 해석할 가능성이 높으며, 사이트가 제대로 작동하지 않고, 다운로드한 파일 잘못 처리될 수 있다.

웹 페이지를 방문하거나 파일을 다운로드할 때 브라우저는 텍스트, 이미지, 비디오 등 어떤 종류의 콘텐츠를 처리하는 지를 이해해야 한다.
단순히 파일 이름에만 의존하는 대신(.html 또는 .jpg같은) 서버에서 보낸 'Content-Type' 헤더라는 작은 메모를 확인한다.
이 메모는 브라우저가 수신하는 콘텐츠의 정확한 유형, 즉 MIME 유형을 알려준다.

따라서 서버가 잘못된 MIME 유형을 보내면 브라우저가 혼란스러워지고 상황이 엉망이 될 수 있다.
그렇기 때문에 서버가 올바른 MIME 유형과 함께 올바른 Content-Type 헤더를 보내는 것이 정말 중요하다.
이것은 브라우저에게 모든 것을 적절하게 처리하는 방법을 알 수 있도록 작은 지침 매뉴얼을 제공하는 것과 같다.

 


MIME 유형의 구조 Structure of a MIME type 

MIME 유형은 가장 일반적으로 슬래시(/)로 구분된 유형과 하위 유형, 두 부분으로 구성되며, 사이에는 공백이 없다.

 

type/subtype

 

유형(type)은 비디오, 텍스트 등 데이터 유형이 속하는 일반 범주를 나타낸다.

 

하위 유형(subtype)은 MIME 유형이 나타내는 지정된 유형의 정확한 데이터 종류를 식별한다.

예를 들어, MIME 유형(type)이 "text"인 경우, 하위 유형은 plain(일반 텍스트), html(HTML 소스코드) 또는 calendar(iCalendar/ics 파일인 경우) 파일일 수 있다.

 

각 유형에는 가능한 하위 유형이 있다.

MIME 유형에는 항상 유형과 하위 유형이 모두 존재하며, 둘 중 하나만 존재하지 않는다.

 

추가 세부 정보를 제공하기 위해 선택적 매개변수를 추가할 수 있다. 

 

type/subtype;parameter=value

 

예를 들면, 기본 유형이 text인 MIME 유형의 경우, 문자를 지정하기 위해 선택적 "charset" 매개변수를 추가할 수 있다.

 

예를 들면, 기본 유형이 "text"인 모든 MIME 유형의 경우, 선택적 "charset" 매개변수를 추가하여 데이터의 문자에 사용되는 문자 집합을 지정할 수 있다.

만약 "charset"을 지정하지 않으면 사용자 에이전트 설정에 의해 재정의되지 않는 한 기본값은 ASCII(us-ASCII)다.

UTF-8 텍스트 파일을 지정하려면 MIME 유형 "text/plain;charset-UTF-8"이 사용된다.

 

MIME 유형은 대소문자를 구분하지 않지만 일반적으로 소문자로 작성한다.

매개변수 값은 대소문자를 구분할 수 있다.

      


유형 Types

유형에는 개별(discrete)멀티파트형(multipart)의 두 가지 클래스가 있다.

개별 유형은 단일 텍스트, 음악 파일, 단일 동영상과 같이 단일 파일 또는 매체를 나타내는 유형이다.

다중 부분 유형은 여러 개의 구성 요소로 구성된 문서를 나타내며, 각 구성 요소에는 고유한 개별 MIME 유형이 있거나 하나의 트랜잭션에서 여러 파일을 함께 전송하는 멀티파트 유형을 캡슐화할 수 있다.

예를 들어, 여러 개의 파일을 이메일에 첨부할 때 멀티파트 MIME 유형이 사용된다.

 


개별 유형 Discrete types

현재 IANA에 등록된 개별 유형은 다음과 같다.

 

  • application
    명시적으로 다른 유형 중(audio, example, font...) 하나에 속하지 않는 모든 종류의 이진 데이터다.

    어떤 방식으로든 실행되거나 해석될 데이터 또는 특정 응용 프로그램이나 응용 프로그램 범주를 사용해야 하는 이진 데이터다.

    일반 이진 데이터(또는 실제 유형을 알 수 없는 이진 데이터)는 application/octet-stream이다.
    다른 일반적인 예로는 application/pdf, application/pkcs8, application/zip 등이 있다.(IANA의 애플리케이션 유형 레지스트리 참조)
"application" 유형은 주로 다양한 종류의 이진 데이터를 처리한다.
이는 다른 특정한 유형으로 명시적으로 분류되지 않는 데이터를 다루기 위한 것이다.

1. 실행파일 : 컴퓨터에서 실행되는 프로그램 파일을 나타낸다.
이러한 파일은 특정한 애플리케이션에 의해 실행되며, 프로그램의 코드와 데이터를 포함한다.
2. 문서파일 : 특정 애플리케이션에서 사용되는 문서 파일을 나타낸다.
예를 들어 PDF 문서나 Microsoft Word 문서와 같은 파일이 여기에 속한다.
3. 아카이브 파일 : 여러 파일이나 폴더를 하나로 묶은 아카이브 파일을 나타낸다.
예를 들어, ZIP 파일이 여기에 속한다.
4. 데이터 파일 : 특정한 애플리케이션에서 사용되는 데이터 파일을 나타낸다.
이는 일반적으로 특정한 형식에 맞춰진 데이터를 포함한다.
5. 기타 이진 데이터 : 다른 특정한 유형으로 분류되지 않는 이진 데이터를 처리하기 위한 용도로 사용된다.
이는 예를 들어, 프로그램 실행에 필요한 추가 리소스나 특정한 데이터 파일 등을 포함할 수 있다.

따라서, "application" 유형은 다양한 종류의 이진 데이터를 처리하는 데 사용된다.

 

  • audio
    오디오 또는 음악 데이터다.
    예를 들면 audio/mpeg, audio/vorbis 등이 있다.(IANA의 오디오 유형 레지스트리 참조)

  • example
    MIME 타입을 사용하는 방법을 보여주는 예제에서 플레이스홀더로 사용하기 위해 예약되어 있다.
    샘플 코드 목록과 문서 외에는 절대로 사용해서는 안된다.
    example은 하위 유형으로도 사용할 수 있다.
    예를 들어, 웹에서 오디오 작업과 관련된 예제에서 MIME 유형 audio/example은 플레이스홀더임을 나타내는 데 사용될 수 있고 실제 환경에서 코드를 사용할 때 적절한 유형으로 대체되어야 한다.

  • font
    글꼴(font)/서체(typeface) 데이터다.
    일반적인 예로는 font/woff, font/ttf, font/otf가 있다.(IANA의 글꼴 유형 레지스트리 참조)

  • image
    이미지 또는 그래픽 데이터에는 비트맵 및 벡터 정적 이미지와 애니메이션 GIF 또는 APNG와 같은 정적 이미지 형식의 애니메이션 버전이 모두 포함된다.
    일반적인 예로는 image/jpeg, image/png, image/svg+xml이 있다.(IANA의 이미지 유형 레지스트리 참조)

  • model
    3D 개체 또는 장면에 대한 모델 데이터다.

    예를 들면 model/3mf 및 model/vrml이 있다.(IANA의 모델 유형 레지스트리 참조)

  • text
    사람이 읽을 수 있는 콘텐츠, 소스 코드 혹은 쉼표로 구분된 값(comma-separated value, CSV) 형식의 데이터와 같은 텍스트 데이터를 포함한 텍스트 전용 데이터다.
    예를 들면 text/plain, text/csv, text/html이 있다.(IANA의 텍스트 유형 레지스트리 참조)

  • video
    MP4 영화(video/mp4)와 같은 비디오 데이터 또는 파일이다.(IANA의 비디오 유형 레지스트리 참조)

 

특정 하위 유형(subtype)이 없는 텍스트 문서의 경우, text/plain을 사용해야 한다.

마찬가지로 특정 하위 유형이나 알려진 하위 유형이 없는 이진 문서의 경우, application/octet-stream 을 사용해야 한다.

텍스트 문서 : 주로 사람이 읽을 수 있는 텍스트 문자로 구성된 파일이다.
텍스트 문서에는 일반텍스트(.txt), HTML(.html), XML(.xml), JSON(.json), Markdown(.md) 등과 같은 다양한 형식이 포함될 수 있다.
이러한 파일에는 인간과 기계 모두가 쉽게 해석하고 조작할 수 있는 텍스트가 포함되어 있다.
텍스트 문서의 예시로는 에세이, 기사, 코드 파일, 구성 파일 및 로그가 있다.

이진 문서 : 반면에 이진 문서는 이진 형식으로 인코딩된 데이터가 포함된 파일이다.
즉, 정보는 사람이 직접 읽을 수 없다.
이러한 파일에는 일반적으로 텍스트, 이미지, 오디오, 비디오 또는 기타 유형의 데이터 조합이 포함된다.
이진 문서에는 이미지(.jpg, .png), 오디오 파일(.mp3, .wav), 비디오 파일(.mp4, .avi), 실행 프로그램(.exe), 압축 아카이브(.zip, .tar.gz) 등이 있다.
텍스트 문서와 달리 이진 문서에는 내용을 해석하고 조작하기 위한 특수 소프트웨어나 도구가 필요하다.

 


다중 부분 유형 Multipart types

다중 부분 유형은 종종 서로 다른 MIME 유형을 가진 여러 조각으로 나눠진 문서 카테고리를 나타낸다.

특히 이메일 시나리오에서 동일한 트랜잭션의 일부인 여러 개의 개별 파일을 나타내는 데 사용할 수 있다.

이것(다중 부분 유형)은 복합 문서를 나타낸다.

 

HTML 양식의 POST 메소드에서 사용되는 "multipart/form-data"와 문서의 일부를 보내기 위해 206 부분 콘텐츠와 함께 사용되는 "multipart/byteranges"를 제외하고 HTTP는 다중 부분 문서를 특별한 방식으로 처리하지 않는다.

메시지가 브라우저로 전송된다.(문서 표시 방법을 모르는 경우 "다른 이름으로 저장"이라는 창이 표시될 수 있다.)

다중 부분 유형(multipart types)이란?
다중 부분 유형은 텍스트, 이미지, 파일과 같은 여러 정보 조각을 인터넷을 통해 하나의 패키지로 함께 보내는 방법이다.
이는 이메일을 보낼 때나 웹사이트에 파일을 업로드할 때 매우 유용하다.

어떻게 사용?
1. 이메일 : 텍스트와 사진, 문서를 첨부하여 이메일을 보낼 수 있다.
각 부분(텍스트 또는 사진)은 하나의 이메일로 묶이지만 별도로 처리된다.
2. 웹 양식 : 웹 사이트에서 양식을 작성하고 파일(사진)을 추가할 때, 다중 부분 유형을 사용하면 모든 내용을 한 번에 원활하게 보낼 수 있다.
3. 파일 일부 다운로드 : 때로는 큰 파일이나 비디오의 일부만 필요한 경우가 있다.
다중 부분 유형은 필요한 부분만 보낼 수 있으므로 시간과 데이터가 절약된다.

어떻게 작동?
데이터가 다중 부분으로 전송되면 경계(boundary)라는 특수 표시로 구분된다.
각 부분은 서로 다를 수 있으며(텍스트 또는 이미지) 이러한 경계는 각 부분을 구분하는 데 도움이 된다.
"다른 이름으로 저장"이라는 창이 표시되는 경우는 다음과 같은 상황에서 발생한다.

1. 알수 없는 파일 형식 : 브라우저가 수신한 파일의 형식을 인식할 수 없는 경우에 발생한다.
예를 들어, 서버에서 전송된 파일이 특정 애플리케이션으로 열 수 있는 형식인데 브라우저가 해당 형식을 인식하지 못하는 경우다.
2. 미디어 형식 : 브라우저가 해당 미디어 형식을 지원하지 않는 경우에도 이 창이 표시될 수 있다.
예를 들어, 오디오나 비디오 파일의 경우 브라우저가 지원하지 않는 형식이거나 플러그인이 필요한 경우에 이 창이 나타날 수 있다.
3. 보안 문제 : 브라우저가 받은 파일이 보안상의 이유로 직접 표시할 수 없는 경우에도 이 창이 나타날 수 있다.
이 경우에는 보안 설정을 변경하거나 파일을 다운로드하여 안전하게 열 수 있도록 한다.

이 창은 사용자에게 해당 파일을 다운로드 하거나 파일을 열어서 볼 수 있는 선택권을 제공한다.
사용자는 다운로드하여 로컬 디스크에 파일을 저장하거나, 볼 수 있는 애플리케이션으로 파일을 열 수 있다.

다중 부분 유형과 개별 유형 간에 "다른 이름으로 저장" 창이 나타나는 경우는 기본적으로 동일하다.
다중 부분 유형은 주로 다중 부분으로 구성된 메시지를 표현할 때 사용되며, 이것은 보통 이메일의 첨부 파일

 

두 가지 다중 부분 유형이 있다.

 

  • message
    다른 메시지를 캡슐화하는 메시지다.
    예를 들어 데이터의 일부로 전달된 메시지를 포함하는 이메일을 나타내거나, 여러 메시지인 것처럼 매우 큰 메시지를 청크로 보낼 수 있도록 하는 데 사용할 수 있다.
    예를 들면 message/rfc822(전달되거나 회신된 메시지 인용용) 및 message/partial이 포함되어 큰 메시지를 자동으로 작은 메시지로 나누어 수신자가 재조립할 수 있다.(IANA의 메시지 유형 레지스트리 참조)

  • multipart
    개별적으로 서로 다른 MIME 유형을 가질 수 있는 여러 구성 요소로 구성 된 데이터다.
    예를 들면 multipart/form-data(FormData API를 사용하여 생성한 데이터용) 및 multipart/byteranges(RFC7233, 섹션 5.4.1에 정의되어 있고 가져온 데이터가 Range 헤더를 사용하여 전달되는 것과 같은 콘텐츠)이다.(IANA의 멀티파트 유형 레지스트리 참조)


웹 개발자를 위한 중요한 MIME 유형 Important MIME types for Web developers


application/octet-stream

이것은 이진 파일의 기본값이다.

알 수 없는 이진 파일을 의미하므로 브라우저는 일반적으로 해당 파일을 실행하지 않거나 실행해야 하는지 묻기도 한다.

Content-Disposition 헤더가 첨부 파일로 설정된 것처럼 처리하고 "다른 이름으로 저장" 대화 상자를 제안한다.

application/octet-stream은 파일의 특정 MIME 유형을 알 수 없거나 파일이 다른 특정 범주에 맞지 않을 때 자주 사용된다.
브라우저는 일반적으로 브라우저 창에 파일을 표시하려고 시도하는 대신, 사용자에게 파일을 저장하라는 메시지를 표시하여 application/octet-stream을 처리한다.
이 동작은 잠재적으로 유해한 파일이 예기치 않게 실행되는 것을 방지하는 데 도움이 된다.

Content-Disposition 헤더는 응답으로 전송되는 콘텐츠의 기본 파일 이름을 제안하고, 브라우저에서 콘텐츠가 표시되거나 처리되는 방식을 제어하는 데 사용할 수 있는 HTTP 헤더다.
Content-Disposition 헤더가 attachment로 설정되면 브라우저 창에 파일을 직접 표시하려고 시도하는 대신, 사용자에게 파일을 저장하라는 메시지를 표시하도록 브라우저에 지시한다.
여기에는 사용자가 다운로드한 파일의 위치와 파일 이름을 선택할 수 있는 "다른 이름으로 저장" 대화상자가 동반되는 경우가 많다.
따라서 서버가 MIME 유형인 application/octet-stream을 사용하여 파일을 보내고 Content-Disposition 헤더를 attachment로 설정하면 브라우저는 일반적으로 이를 표시하기보다는 다운로드할 파일로 해석한다.

 


text/plain

이것은 텍스트 파일의 기본값이다.

실제로 "알 수 없는 파일"을 의미하더라도 브라우저는 이 텍스트 파일을 표시할 수 있다고 가정한다.

 

참고 : text/plain은 "모든 종류의 텍스트 데이터"를 의미하지 않는다.

특정 종류의 데이터를 기대하는 경우 일치하는 것으로 간주하지 않을 가능성이 높다.

특히 CSS 파일을 선언하는 <link> 요소에서 text/plain 파일을 다운로드 하는 경우, text/plain으로 표시되면 유효한 CSS 파일로 인식되지 않는다.

CSS MIME 유형인 text/css를 사용해야 한다.

MIME 유형 'text/plain'이 텍스트 데이터의 일반 레이블로 자주 사용되지만 모든 유형의 텍스트 데이터를 포함하지는 않는다.
브라우저는 MIME 유형을 이용하여 다양한 유형의 파일을 처리하는 방법을 결정한다.
브라우저가 CSS와 같은 특정 유형의 텍스트 데이터를 기대하는 경우 'text/plain'이라는 라벨이 붙은 파일을 유효한 CSS 파일로 인식하지 못한다.

예를 들어, 브라우저가 MIME 유형으로 'text/plain'을 사용하여 CSS 파일을 선언하는 HTML 문서에서 <link> 요소를 발견하면 이를 유효한 CSS 파일로 해석하지 않는다.
대신 일반 텍스트로 처리된다.
이로 인해 렌더링 문제가 발생하거나 파일이 웹페이지가 의도한 대로 적용되지 않을 수 있다.

브라우저에서 올바른 처리를 보장하려면 CSS 파일에 적합한 MIME 유형인 text/css를 사용해야 한다.
이 MIME 유형은 파일에 CSS 스타일이 포함되어 있으므로 CSS 스타일로 해석되어야 함을 브라우저에 명시적으로 알려준다.
올바른 MIME 유형을 사용하면 브라우저가 의도한 목적에 따라 콘텐츠를 정확하게 처리하고 적용하는 데 도움이 된다.

 


text/css

웹페이지의 스타일을 지정하는 데 사용되는 CSS 파일은 text/css와 함께 전송되어야 한다.

서버가 CSS 파일의 .css 접미사를 인식하지 못하는 경우, text/plain 또는 application/octet-stream MIME 유형으로 보낼 수 있다.

이러면 대부분의 브라우저에서 CSS로 인식되지 않고 무시된다.

 


text/html

모든 HTML 콘텐츠는 이 유형으로 제공되어야 한다.

XHTML을 위한 대체 MIME 유형(예 : application/xhtml+xml)은 요즘엔 대부분 쓸모가 없다.

 

참고 : XML의 엄격한 구문 분석 규칙과 <![CDATA[...]]> 섹션 또는 HTML/SVG/MathML 네임스페이스에 속하지 않는 요소를 원하는 경우 application/xml 또는 application/xhtml+xml을 사용한다. 

 


text/javascript

IANA 미디어 유형 레지스트리와 RFC 9239 및 HTML 사양에 따라 JavaScript 콘텐츠는 항상 MIME 유형 text/javascript를 사용하여 제공되어야 한다.

다른 MIME 유형은 JavaScript에 유효한 것으로 간주되지 않으며 text/javascript 이외의 MIME 유형을 사용하면 스크립트가  로드되지 않거나 실행되지 않을 수 있다.

 

스크립트 콘텐츠에 대한 문자 집합을 지정하려는 시도로 인해, MIME 유형의 일부인 charset 매개변수와 함께 잘못 제공되는 일부 JavaScript 콘텐츠를 발견할 수 있다.

해당 charset 매개변수는 JavaScript 콘텐츠에 유효하지 않으며 대부분의 경우 스크립트 로드에 실패하게 된다.

웹 브라우저가 JavaScript 파일을 처리할 때는 기본적으로 파일이 UTF-8로 인코딩되어 있다고 기대한다.
그러므로 웹 서버는 JavaScript 파일을 간단히 "application/javascript" 형태의 Content-Type으로 제공하는 것이 일반적이고 적합하다.
이 방법으로 브라우저는 파일을 자동으로 UTF-8로 인식하고 적절히 처리한다.

그럼에도 불구하고, 가끔 웹 서버가 JavaScript 파일을 "application/javascript; charset=utf-8"과 같이 charset 매개변수를 포함하여 제공하는 경우가 있다.
이러한 방식은 사실 필요하지 않으며, 때로는 문제를 일으킬 수 있다.
JavaScript는 이미 UTF-8 인코딩을 기본으로 사용하기 때문에, charset 매개변수를 추가하는 것은 불필요하다.
이 매개변수를 포함하면 브라우저가 스크립트를 잘못 해석할 가능성이 있으며, 이는 스크립트가 올바르게 로드되지 않는 문제로 이어질 수 있다.

따라서 가장 좋은 방법은 JavaScript 파일을 MIME 타입 "application/javascript"으로만 제공하고, charset 매개변수를 포함하지 않는 것이다.
이렇게 하면 모든 브라우저가 파일을 올바르게 인식하고 처리할 수 있으며, 스크립트 로딩 실패 같은 문제를 방지할 수 있다.
이는 브라우저 호환성을 보장하고, 웹 페이지의 안정적인 작동을 지원하는 가장 안전한 방법이다.

 


Legacy JavaScript MIME types

text/javascript MIME 유형 외에도 역사적인 이유로 MIME 스니핑 표준(브라우저가 MIME 유형을 해석하고 유효한 유형이 없는 콘텐츠를 어떻게 처리할지 파악하는 방법에 대한 정의)도 JavaScript를 허용한다.

다음 레거시 JavaScript MIME 유형 중 하나를 사용하여 제공된다.

 

  • application/javascript
  • application/ecmascript
  • application/x-ecmascript
  • application/x-javascript
  • text/ecmascript
  • text/javascript1.0
  • text/javascript1.1
  • text/javascript1.2
  • text/javascript1.3
  • text/javascript1.4
  • text/javascript1.5
  • text/jscript
  • text/livescript
  • text/x-ecmascript
  • text/x-javascript

참고 : 특정 사용자 에이전트(웹 브라우저 또는 웹 서버와 상호작용하는 소프트웨어)가 이들 중 일부 또는 전부를 지원하더라도 text/javascript만 사용해야 한다.

현재는 물론 앞으로도 작동이 보장되는 유일한 MIME 유형이다.

과거엔 다양한 MIME 타입이 JavaScript 파일에 사용되었다.
하지만 현재 표준으로 text/javascript가 채택되었으며, 이를 사용하는 것이 가장 호환성이 좋다.
다른 레거시 MIME 타입은 더 이상 권장되지 않으며, 일부 브라우저나 환경에서는 지원이 중단될 수 있다.
그리고 모든 개발자와 서버가 동일한 MIME 타입을 사용하면, 브라우저와 도구들이 일관되게 동작할 수 있다.

 


Image types

MIME 유형이 이미지인 파일에는 이미지 데이터가 포함되어 있다.

하위 유형은 데이터가 나타내는 특정 이미지 파일 형식을 지정한다.

 

다음 이미지 유형은 웹페이지에서 사용하기에 안전한 것으로 간주될 만큼 일반적으로 사용된다.

  • image/apng : 애니메이션 휴대용 네트워크 그래픽(APNG)
  • image/avif : AV1 이미지 파일 형식(AVIF)
  • image/gif : 그래픽 교환 형식(GIF)
  • image/jpeg : 공동사진전문가그룹 이미지(JPEG)
  • image/png : 휴대용 네트워크 그래픽(PNG)
  • image/svg+xml : 확장 가능한 벡터 그래픽(SVG)
  • image/webp : 웹 그림 형식(WEBP)

이미지 파일 형식 및 형식 가이드는 다양한 이미지 형식을 사용해야 하는 경우에 대한 정보와 권장 사항을 제공한다.

 


Audio and video types

이미지의 경우와 마찬가지로 HTML은 웹 브라우저가 <audio> 및 <video> 요소에 대해 특정 파일 및 코덱 유형을 지원하도록 요구하지 않아서, 미디어에 사용할 파일 형식과 코덱을 선택할 때 웹사이트 사용자들이 사용할 수 있는 브라우저 범위를 고려하는 것이 중요하다.

 

미디어 컨테니어 형식 가이드는 웹 브라우저에서 일반적으로 지원하는 파일 형식 목록을 제공한다.

여기에는 특별한 사용 사례, 단점, 호환성 정보 및 기타 세부 사항에 대한 정보가 포함된다.

 

오디오 코덱 비디오 코덱 이드에는 웹 브라우저가 자주 지원하는 다양한 코덱이 나열되어 있으며 지원하는 오디오 채널 수, 사용되는 압축 종류, 비트 전송률 등과 같은 기술 정보와 함께 호환성 세부 정보를 제공한다.

WebRTC 가이드에서 사용하는 코덱은 주요한 웹 브라우저에서 지원하는 코덱을 구체적으로 포함하여 세부 사항을 확장함으로써 지원하려는 브라우저 범위를 포괄하는 코덱을 선택할 수 있다.

 

오디오 또는 비디오 파일의 MIME 유형은 일반적으로 컨테이너 형식(파일 유형)을 지정한다.

선택적 코덱 매개 변수 MIME 유형에 추가하여 사용할 코덱과 코덱 프로필, 레벨 또는 기타 정보와 같이 미디어를 인코딩하는 데 사용된 옵션을 추가로 지정할 수 있다.

 

일반적인 미디어 유형에 대한 자세한 내용은 일반적인 MIME 유형 페이지에서 볼 수 있다.

 


multipart/form-data

multipart/form-data 유형은 완성된 HTML 양식의 값을 브라우저에서 서버로 보낼 때 사용할 수 있다.

 

다중 부분 문서 형식으로, 경계(더블 대시 -- 로 시작하는 문자열)로 구분된 다양한 부분으로 구성된다.

각 부분은 자체 HTTP 헤더, Content-Disposition 및 파일 업로드 필드를 위한 Content-Type을 포함하는 자체 엔티티다.

 

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="myfiled"

(data)
--aBoundaryString
(more subparts)
--aBoundaryString--

 

 

이 유형의 요청은 파일을 업로드할 때, 웹 양식을 통해 폼 데이터를 제출할 때 자주 사용된다.

첫번째 부분 : Content-Type: multipart/form-data; boundary=aBoundaryString
이 헤더는 요청 본문에서 경계문자열('aBoundaryString')로 구분된 여러 부분으로 포함되어 있음을 나타낸다.

다중 부분 양식 데이터의 각 부분은 경계 문자열로 구분된다.
이 예제의 경계 문자열은 --aBoundaryString이다.

두번째 부분 : 파일 업로드
--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg

(data)

Content-Disposition: form-data; name="myFile"; filename="img.jpg"
이 헤더는 해당 부분이 myFile이라는 양식 필드이고, img.jpg라는 파일을 포함하고 있음을 나타낸다.
Content-Type: image/jpeg
파일의 MIME 유형(이 경우에는 JPEG)을 지정한다.
(data)

업로드되는 파일의 이진 데이터를 나타낸다.


세번째 부분 : 양식 필드 
--aBoundaryString
Content-Disposition: form-data; name="myField"

(data)

Content-Disposition: form-data; name="myField"
myField라는 간단한 양식 필드임을 나타낸다.
(data)
양식 필드 myField의 값이다.


네번째 부분 : 마지막 경계
--aBoundaryString--​

다중 부분 데이터의 끝을 표시한다.

요약
multipart/form-data : 파일을 포함한 양식 데이터를 서버로 보내는 데 사용되는 인코딩 유형이다.
Boundary : 양식 데이터의 각 부분을 구분하는 문자열이다.
양식 데이터의 끝을 나타낼 때는 --로 시작하고 --로 끝난다.
Content-Type : 전송되는 데이터의 MIME 유형을 지정한다.

이 구조를 통해 웹 애플리케이션은 파일 업로드를 포함한 복잡한 데이터 제출을 효율적으로 처리할 수 있다.

 

다음 <form> :

<form
  action="http://localhost:8000/"
  method="post"
  enctype="multipart/form-data">
  <label>Name: <input name="myTextField" value="Test" /></label>
  <label><input type="checkbox" name="myCheckBox" /> Check</label>
  <label>
    Upload file: <input type="file" name="myfile" value="test.txt" />
  </label>
  <button>Send the file</button>
</form>

 

보낼 메시지 : 

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0)
Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465

-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myTextField"

Test
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myCheckBox"

on
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plain

Simple file.
-----------------------------8721656041911415653955004498--

 


multipart/byteranges

multipart/byteranges MIME 유형은 브라우저에 부분 응답을 보내는 데 사용된다.

 

206 Partial Content 상태 코드가 전송될 때, 이 MIME 유형은 문서가 요청된 범위 각각에 대해 하나씩, 여러 부분으로 구성되어 있음을 나타낸다.

다른 멀티파트 유형과 마찬가지로 Content-Type은 경계를 사용하여 조각을 분리한다.

각 부분에는 실제 유형이 포함된 Content-Type 헤더와 그것이 나타내는 범위의 Content-Range가 있다.

HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 385

--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-200/1270

eta http-equiv="Content-type" content="text/html; charset=utf-8" />
  <meta name="viewport" content
--3d6b6a416f9b5
content-Type: text/html
Content-Range: bytes 300-400/1270

-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: "Open Sans", "Helvetica
--3d6b6a416f9b5--

 


올바른 MIME 유형 설정의 중요성 Importance of setting the correct MIME type

일부 서버 구성에서는 관련 MIME 유형을 사용하여 파일 연결, 압축, 또는 캐싱과 같은 최적화를 수행할 수 있다.

특정 MIME 유형의 파일을 압축하는 Apache 구성의 예는 h5bp/server-configs-apache를 참조한다.

 

대부분의 웹 서버는 인식할 수 없는 리소스를 application/octet-stream MIME 유형으로 보낸다.

보안상의 이유로 대부분의 브라우저는 이러한 리소스(application/octet-stream MIME 유형으로 보내진 리소스)에 대해 사용자 정의 기본 작업 설정을 허용하지 않으므로 사용자는 이를 사용하기 위해 디스크에 저장해야 한다.

인식할 수 없는 리소스를 출처를 알 수 없는 택배상자, 사용자 정의 기본 작업을 택배를 개봉하고 내용물을 확인, 디스크를 경찰서로 비유했다.

 

흔히 발생하는 잘못된 서버 구성

  • RAR 압축 파일 : 이 경우에 이상적인 것은 원본 파일들의 실제 유형이다.
    하지만 RAR 파일은 다양한 유형의 여러 리소스를 포함할 수 있어서 종종 불가능하다.
    이 경우에는 application/x-rar-compressed를 전송하도록 서버를 구성한다.
각 파일이 그 자체의 고유하고 정확한 MIME 타입으로 제공될 수 있다면, 브라우저나 애플리케이션이 해당 파일을 올바르게 인식하고 적절하게 처리할 수 있기 때문에 원본 파일의 실제 유형을 가질 때가 가장 이상적인 상태다.
  • 오디오 및 비디오 : 오직 올바른 MIME 유형을 가진 리소스만 <video> 또는 <audio> 요소에서 재생된다.
    반드시 오디오 및 비디오에 대한 올바른 미디어 유형을 지정해야 한다.
  • 독점 파일 형식 : 대부분의 브라우저는 이 일반 MIME 유형(application/octet-stream)에 대한 기본 동작(예 : "Word"에서 열기) 정의를 허용하지 않으므로 application/octet-stream을 사용하지 말아야 한다.
    application/vnd.mspowerpoint와 같은 특정 유형을 사용하면 자동으로 이러한 파일을 사용자가 선택한 프레젠테이션 소프트웨어에서 열 수 있다.
독점 파일 형식은 특정 소프트웨어에서만 열 수 있는 파일 형식이다.
예를 들어, Microsoft PowerPoint에서 열 수 있는 PPT 파일이 이에 해당된다.

application/octet-stream은 일반적인 MIME 유형으로, 이 유형을 사용하면 브라우저가 파일의 종류를 알 수 없기 때문에 어떤 프로그램으로 열어야 하는지 모른다.
따라서 보통의 경우, 브라우저는 이 파일을 다운로드하도록 한다.
또, 대부분의 브라우저는 이 일반 MIME 유형에 대해 특정 행동(예 : "Word"에서 열기)을 정의할 수 없다.

application/vnd.mspowerpoint와 같은 구체적인 MIME 유형을 사용하면 브라우저가 파일의 종류를 인식하고, 사용자가 선택한 소프트웨어에서 파일을 자동으로 열 수 있게 된다.
예를 들어, 이 MIME 유형은 파일이 PowerPoint에서 열려야 한다는 것을 브라우저에게 알려준다.

 


MIME 스니핑 MIME sniffing

MIME 유형이 없거나 브라우저가 MIME 유형이 올바르지 않다고 판단하는 경우, 브라우저는 리소스의 바이트를 보고 올바른 MIME 유형을 추측하는 MIME 스니핑을 수행할 수 있다.

 

각 브라우저는 서로 다른 상황에서 MIME 스니핑을 다르게 수행한다.

예를 들어, Safari는 전송된 MIME 유형이 적합하지 않은 경우에 URL의 파일확장자를 확인한다.

하지만 일부 MIME 유형은 실행 가능한 콘텐츠를 나타내므로 보안 문제가 있다.

그래서 서버는 X-Content-Type-Options 헤더를 전송하여 MIME 스니핑을 방지할 수 있다.

 


문서 유형을 전달하는 다른 방법 Other methods of conveying document type

MIME 유형이 문서 유형 정보를 전달하는 유일한 방법은 아니다.

  • 특히 Microsoft Windows에서는 파일 이름 접미사(예 : .exe, .jpg, .pdf등등)가 사용되는 경우가 있다.
    모든 운영 체제에서 이러한 접미사가 의미 있는 것으로 간주하는 것은 아니며(예 : Linux 및 macOS) 접미사가 정확하다는 보장도 없다.
  • 매직 넘버가 있다.
    다양한 형식의 구문을 사용하면 바이트 구조를 보고 파일 유형을 추론할 수 있다.
    예를 들어, GIF 파일은 47 49 46 38 39 16진수값(GIF)으로 시작하고 PNG 파일은 89 50 4E 47(.PNG)로 시작한다.
    모든 파일 형식에 매직 넘버가 있는 것은 아니므로 이 역시 100% 신뢰할 수는 없다.

 

MIME types (IANA media types) - HTTP | MDN

A media type (also known as a Multipurpose Internet Mail Extensions or MIME type) indicates the nature and format of a document, file, or assortment of bytes. MIME types are defined and standardized in IETF's RFC 6838.

developer.mozilla.org

 

'프론트엔드 > HTTP - 후' 카테고리의 다른 글

HTTP caching  (0) 2024.12.01
Compression in HTTP  (0) 2024.10.13
HTTP Messages  (0) 2024.10.13
A typical HTTP session  (0) 2024.10.13
An overview of HTTP  (0) 2024.10.13