반응형
✔️ 텍스트와 바이너리
- 텍스트와 바이너리는 컴퓨터가 파일을 구분하는 두 가지 종류입니다.
- 텍스트 (ASCII 파일)
- 사람이 알아볼 수 있는 문자만 저장되어 있는 파일
- 숫자는 문자로 변환 후 형식에 맞게 문자만을 다룬다
- 바이너리 파일 (이진 파일)
- 사람이 알아보기 어려운 문자와 숫자가 저장되어 있는 파일
- 데이터를 있는 그대로 읽고 쓴다
- 텍스트 (ASCII 파일)
✔️ MIME(Multipurpose Internet Mail Extensions)란?
MIME(영어: Multipurpose Internet Mail Extensions)는 전자 우편을 위한 인터넷 표준 포맷이다.
전자우편은 7비트 ASCII 문자를 사용하여 전송되기 때문에, 8비트 이상의 코드를 사용하는 문자나 이진 파일들은 MIME 포맷으로 변환되어 SMTP로 전송된다.실질적으로 SMTP로 전송되는 대부분의 전자 우편은 MIME 형식이다.MIME 표준에 정의된 content types은 HTTP와 같은 통신 프로토콜에서 사용되며, 점차 그 중요성이 커지고 있다.
- 위키피디아
- 텍스트 기반 프로토콜인 HTTP를 통해 바이너리 데이터(이미지, 영상 등)를 전송하기 위해 고안되었습니다.
- 여러 멀티미디어 바이너리 데이터를 ASCII 코드로 변환하는 인코딩 방법과 MIME 타입을 정의합니다.
- 또한 수신측에서 MIME 타입을 통해 ASCII 코드를 올바르게 바이너리 데이터로 변환하는 디코딩 방법을 정의합니다.
📌 문법
type/subtype
📌 타입
- application/octet-stream
- 8비트 단위의 바이너리 데이터를 의미하며 특별히 표현할 수 있는 프로그램이 존재하지 않은 경우 사용합니다.
- content-disposition 헤더를 attachment로 줌으로써 해당 데이터를 수신 받은 브라우저가 설정할 수 있습니다.
📌 multipart/form-data
<form action="http://localhost:8000/" 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>
- HTML의 form 태그 안에서 post와 같은 방식으로 여러가지 데이터를 함께 묶어 전송하는 경우 사용합니다.
📌 multipart/byteranges
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="vieport" content
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 300-400/1270
-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: "Open Sans", "Helvetica
--3d6b6a416f9b5--
- HTTP request가 아닌 HTTP response 메시지에 대한 multipart 타입입니다.
- 브라우저가 Range Request를 요청하면 서버는 Status code 206과 함께 범위 응답을 합니다.
- 범위 요청/응답이란 데이터를 여러 번에 걸쳐 리턴해줄 것을 요청하고 그에 맞게 응답하는 것입니다.
📌 어떻게 사용할까?
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+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
...
- HTTP 헤더 중 Content-Type 을 통해 타입을 명시해서 송신하면 수신측에선 바이너리 데이터의 타입을 확인한 후 올바르게 디코딩하게 됩니다.
✔️ Base64란?
컴퓨터 분야에서 쓰이는 Base 64 (베이스 육십사)란 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.
-위키피디아
- ASCII 코드는 OS의 차이 등으로 데이터 전달에 안전하지 않기에 공통적인 64개의 문자열만을 사용한 인코딩 방식입니다.
- 문자열은 알파벳 대소문자(A-Z, a-z), 0-9, 기호(+, /)만을 사용하고 "="는 끝을 알리는 코드로 사용합니다.
- 인코딩 과정은 24bit의 buffer를 생성하여 바이트 데이터를 넣은 뒤 6bit 단위로 잘라 ASCII 문자로 변환합니다.
- 인코딩 중 남은 바이트가 3바이트(24bit) 미만이라면 남은 부분에 패딩비트(0)이 추가됩니다.
- 6bit 당 2bit의 Overhead가 발생하여 인코딩 후 약 33% 정도 데이터 양이 늘어나게 됩니다.
📄 참고
스프링의 정석
https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464
https://ko.wikipedia.org/wiki/MIME
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
반응형
'🖥 CS > Web' 카테고리의 다른 글
Cookie와 Session (0) | 2022.05.30 |
---|---|
CGI란? (0) | 2022.05.25 |
WS? WAS? (0) | 2022.05.25 |