MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘이다.
웹에서 파일의 확장자는 별 의미가 없다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도록, 서버가 정확히 설정하는 것이 중요함.
브라우저들은 리소스를 내려받았을 때 해야 할 기본 동작이 무엇인지를 결정하기 위해 대게 MIME 타입을 사용
문법
일반적인 구조
type/subtype
/
로 구분된 두 개의 문자열인 타입과 서브타입으로 구성되며 스페이스는 허용하지 않는다.
개별 타입
특정 서브타입이 없는 텍스트 문서들에 대해서는 text/plain
이 사용되어야함.
특정 혹은 알려진 서브타입이 없는 이진 문서에 대해서는 application/octect-stream
을 사용해야함
멀티 파트 타입
multipart/form-data
mutlipart/byteranges
멀티파트 타입은 일반적으로 다른 MIME 타입들을 지닌 개별적인 파트들로 나누어지는 문서의 카테고리를 가리킨다.
(합성된 문서를 나타내는 방법)
웹 개발자들을 위한 중요한 MIME 타입
application/octect-stream
이진 파일을 위한 기본값이며, 이 타입은 실제로 잘 알려지지 않은 이진 파일을 의미하므로, 브라우저는 보통 자동으로 실행하지 않거나 실행해야 할지 묻기도 한다. Content-Disposition
헤더 값이 attachment
로 설정되어 있다면 다운로드 시 무조건 '파일 다운로드' 대화상자가 실행된다.
text/plain
텍스트 파일에 대한 기본 값. 실제로 알려지지 않은 텍스트 파일일지라도 브라우저들은 그것을 디스플레이할 수 있다고 가정
text/css
웹 페이지 내에서 인터프리트되야하는 모든 CSS 파일들은 text/css
파일이 되어야 한다. 서버들은 .css 접미사를 가진 파일들을 CSS 파일이라고 인식하지 못해 text/plain
또는 application/octect-stream
MIME타입으로 전송을 하게되는데 이런 경우 대부분 브라우저들이 CSS파일이라고 인식하지 못하고 무시될 것이다. 따라서 올바른 타입으로 CSS파일을 다루는게 중요하다.
text/html
모든 HTML 컨텐츠는 이 타입과 함께 서브되어야 한다.
multipart/form-data
multipart/form-data 은 브라우저에서 서버로 HTML Form의 내용을 전송 시 사용할 수 있다.
멀티 파트는 여러개의 파트로 구성이 되는데 그 경계를 이중 대시 ('—'
)로 시작되는 문자열로 구분되어 진다.
각 파트는 그 자체로 개체이며 자신만의 HTTP헤더를 가지는데, 파일 업로드 필드를 위한 헤더로는 Content-Disposition
, 그리고 가장 일반적인 것 중 하나인 Content-Type
이 있다.
다음과 같은 HTML form이 action이 되면
<form action="http://localhost/" method="post" enctype="multipart/form-data">
<input type="text" name="myTextField">
<input type="checkbox" name="myCheckBox">Check</input>
<input type="file" name="myFile">
<button>Send the file</button>
</form>
서버에로 다음과 같은 Request Message를 전송한다.
POST / HTTP/1.1
Host: localhost
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+xml,application/xml;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 // input에 입력된 값
-----------------------------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--
출처 : https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
'프로그래밍 노트 > WEB' 카테고리의 다른 글
REST API 보안_1 (0) | 2019.05.30 |
---|---|
REST API 디자인 가이드 (0) | 2019.05.18 |
REST API에 관한 고찰 (0) | 2019.05.18 |
HTTP란? (HTTP Message Format, Request Message & Response Message) (0) | 2019.05.13 |
URI란 무엇인가? (0) | 2019.05.03 |