반응형
ி 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 종류
메인타입 |
설명 |
서브 타입 |
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
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 - 파일 다운로드 시 로컬에 저장될 지 결정
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 |