프로젝트를 진행하면서 파일첨부기능을 구현하던중 multipart/form-data 에대한 사용이 필요했다

오늘은  정리할겸 HTTP, multipart/form-data 키워드에대해서 알아보고

그중에서 multipart/form-data 에 대해서 알아보자

 

 

 

http란 HyperText Transfer Protocal 이다.

 

문서를 전송하기위한 프로토콜

 

즉 서버와 클라이언트의 사이에서 어떻게 메시지를 교환할지를 정해 놓은 규칙이다.

 

우리가하용하는 웹브라우저에서 인터넷 주소 맨 앞에들어가는 http://가 바로 이프로토콜을 사용해서 정보를 교환하겠다는 표시이다.

 

 

 

 

 데이터를 교환할때 타입은 두가지가 있다.

 

요청과 응답이다.

 

 

왼쪽은 요청(client -> server)  오른쪽은 응답(server -> client)

 

 

 

1. 파일 업로드를 구현할 때, 클라이언트가 웹브라우저라면 폼을 통해서 파일을 등록해서 전송한다.

2. 웹 브라우저가 보내는 HTTP 메시지는 Content-Type 속성이 multipart/form-data로 지정되고 정해진 형식에 따라 메시지를 인코딩      하여 전송한다.

3. 이를 처리하기 위한 서버는 멀티파트 메시지에 대해서 각 파트별로 분리하여 개별 파일의 정보를 얻게 된다.

 

아래가 multipart로 형식으로 담아서 볼낼때의 정보의 예시이다.

 

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: multipart/form-data; boundary=-----XXX

-----XXX
Content-Disposition: form-data; name="username"

kim
-----XXX
Content-Disposition: form-data; name="age"

20
-----XXX
Content-Disposition: form-data; name="file1"; filename="intro.png"
Content-Type: image/png

12368asdzxc9qwetwga35468asdfzxvczxc....
-----XXX--

 

Multipart란 클라이언트에서 서버로 파일을 보낼 때 사용하는 Content Type이다.

클라이언트에서 보내는 요청을 찬찬히 뜯어보면 boundary=-----XXX 로 되어있는 것을 볼 수 있는데, 이는 각 Form 데이터의 경계를 나타내며, 이 경계를 기준으로 각각의 데이터를 표기하여 여러 타입의 데이터를 섞이지 않고 전달하는 것을 목적으로 만들어진 데이터 전송법이다.

 

username과 age처럼 일반적인 데이터와 달리, 파일의 경우 Content-Type과 바이너리 데이터를 전송되는 것을 확인할 수 있다. HTTP 요청은 모두 문자열로 이루어지는데, 서버는 해당 요청을 받아 HTTP 스펙에 맞춰 이를 변환하는 작업을 진행해야한다.

 

 

 

 

http로 웹상에서 프로토콜을 정해 client 와 server 간의 요청응답으로 데이터를 주고받으며

줄때 file upload에서는 multipart 형식으로 요청한다는 것을 간략하게 정리해보았다.

 

 

 

 

 

+ Recent posts