본문 바로가기

프로그래밍/웹

Content-TYPE 헤더와 MIME-TYPE

반응형

ி Content-TYPE

 
  • 전송하는 데이터의 형식을 지정한다.
  • HTTP 헤더 중 하나이며 MIME 형식으로 표현한다.
  • 전송하는 데이터는 문자열 스트림 또는 바이트 스트림으로 전송한다.
  • 문자열 스트림은 2바이트를 입출력하여 모든 나라 언어로 구성된 파일을 입출력 할 수 있다.
  • 바이트 스트림은 1바이트 입출력, 바이너리를 있는 그대로 송수신하기 때문에 영문자로 구성된 이미지나
    동영상 같은 파일 입출력 등에 적합하다.
  • 브라우저는 데이터를 표시할 MIME-TYPE을 확인하여 때 어떤 종류의 스트림인지 확인한다.
  • Content-type과 반대되는 Accept 헤더는 수신할 데이터 형식을 지정한다.

 

 

ி MIME-TYPE

 
  • Multipurpose Internet Mail Extensions(다목적 인터넷 메일 확장자)
  • 전자 우편의 데이터 형식을 정의한다.
  • 전자 우편은 7비트 아스키로 전송되어 문자 데이터 외에 바이너리 데이터(이미지, 동영상 등)를 전달할 수 없다.
    따라서 멀티미디어 데이터를 주고받을 수 있도록 MIME 타입을 정의한다.
  • MIME 타입은 여러 멀티미디어 데이터들의 바이너리 데이터를 아스키로 변환하는 방법이 정의된다.
  • 전자 우편 사용을 위해 등장했지만 현재는 HTTP 통신의 전송 데이터를 표현하기 위해서도 사용된다.
  • IANA에서는 미디어 타입(MEDIA-TYPE)으로 표현한다.



MIME-TYPE 종류

 
MIME는 /로 구분하여 메인타입과 서브타입으로 구성된다.


메인타입



설명



서브 타입



text



텍스트 표현



text/plain, text/html, text/css, text/javascript



image



이미지 표현



image/gif, image/png, image/jpeg, image/bmp



video



동영상 표현



video/mp4, video/ogg, video/mpeg4-generic



application



모든 종류의 이진 데이터 표현



application/octet-stream, application/vnd.mspowerpoint, application/xml,  application/pdf, 
 application/json


application/x-www-form-urlencoded



multipart



여러가지 타입의 데이터들을 동시 전송할 때 사용



multipart/form-data, multipart/byteranges


application/octet-stream
octet은 8비트 단위의 바이너리 데이터를 의미하며 application의 형식이 지정되지 않았을 때 사용한다. 
예를들어 .bin 파일을 첨부하면 해당 파일 형식은 표준에 존재하지 않으므로 octet-stream으로 표현된다.

 

application/x-www-form-urlencoded
폼 데이터를 POST 방식으로 전송할 때의 표준 MIME type이다.
아래와 같이 key-value 형태로 인코딩된다.
param1 : test value
param2 : test2
인코딩 값 : param1=test+value&m2=test2

스페이스를 +로, pair 사이를 &로 분리한다. non-alphanumeric bytes는 %HH 로 변경되면서, 1byte가 3bytes 로 

늘어나므로 대용량 파일이나 바이너리 혹은 non-ASCII로 구성된 파일을 보낼 때는 적합하지 않다.

 

multipart/form-data

x-www-form-urlencoded의 비효율적인 인코딩을 개선하기 위해 나온 것으로 boundary를 이용하여
key-value pair를 구분한다.  아래 HTML은 multipart post 방식으로 데이터를 전송하는 예제이다.

 <form action="/writeForm" method="post" enctype="multipart/form-data">	cs     제목 : <input type="text" name="subject" value="제목입니다."><br>     내용 : <input type="text" name="content" value="내용입니다."><br>     첨부 파일 : <input type="file" name="files" <!-- test.png 파일 첨부 --> ><br>     <input type="submit" value="전송">  </form>

위 폼을 제출하면 HTTP Content-Type 헤더가 multipart/form-data로 설정된다.

 Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytdAAq5zWPgv8Jo8b  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9    ------WebKitFormBoundarytdAAq5zWPgv8Jo8b  Content-Disposition: form-data; name="subject"    제목입니다.  ------WebKitFormBoundarytdAAq5zWPgv8Jo8b  Content-Disposition: form-data; name="content"    내용입니다.  ------WebKitFormBoundarytdAAq5zWPgv8Jo8b  Content-Disposition: form-data; name="files"; filename="test.png"  Content-Type: image/png    binary...    ------WebKitFormBoundarytdAAq5zWPgv8Jo8b--
boundary
  • body에 포함된 메시지를 구분할 수 있는 값이다. Content-Type에 명시된 바운더리 문자열을 이용해
    전송되는 데이터를 서브 파트로 구분한다.
  • 바운더리 앞에 데이터 구분자(--)를 주어 데이터를 구분하고 마지막 바운더리에 --를 붙여 최종 데이터임을 명시한다.
  • 헤더와 헤더를 구분하는 것은 개행문자, 헤더와 바디를 구분하는 것은 개행문자 2개이다.

 

content-disposition
  • 서브파트마다 Content-Disposition 필드가 존재한다. 이는 응답 body를 브라우저에 어떻게 표시할 지 지정하는 필드이다.
  • Content-Disposition 필드에는 inline, form-data, attachement가 지정될 수 있으며 기본 값은 inline이다.
inline : 컨텐츠를 웹 브라우저 내에서 확인
form-data - 폼 데이터를 지정
attachement - 파일 다운로드 시 로컬에 저장될 지 결정
  • Disposition의 각 항목은 세미콜론(;)으로 구분한다.

 

※ 참고 

http://1ambda.github.io/content-type-vs-accept-http-header

https://dololak.tistory.com/130

 

반응형

'프로그래밍 > ' 카테고리의 다른 글

Python Flask 요청 처리 예제  (0) 2021.02.20
자바스크립트 async와 defer 속성  (1) 2021.02.14
스프링 실행 과정 및 요청 처리 순서  (0) 2021.02.06
Spring MVC 개발 프로세스  (0) 2021.01.31
JSTL과 EL 사용하기  (0) 2021.01.30