multipart

zwundzwzig·2022년 9월 18일
0

HTTP

목록 보기
3/3
post-thumbnail

Q) 클라이언트에서 이미지 파일을 서버로 보낼 때 어떤 과정으로 진행될까?

클라이언트에서 객체나 텍스트가 아닌 이미지, 영상, 오디오 같은 타입의 파일을 전송하려면 기존 http에서 req/res 방식을 좀 달리 해야할 것이다. 그러기 위해선 서버 간 통신 Content-Type 에 변화를 줘야한다.


multipart

클라이언트가 파일을 HTTP POST 메소드를 활용해 서버에 전송하고자 한다면 당연히 기존 텍스트, 객체 등과 같은 방식으로 전달하면 안 될 것이다.

그럴 때 클라이언트 입장에서 해당 파일을 재가공해서 서버에 요청해야 할 것이다.

<form action="/uploads" method="post" enctype="multipart/form-data">
  <input type="file" name="avatar" />
  <input type="text" name="description" />
</form>

클라이언트의 html reqest 형식이 다음과 같다고 할 때 위의 코드를 해석해 보자면,

  1. http POST 메소드를 활용하여 avatar라는 이름의 form 안의 정보를 담아 요청을 보낸다.
  2. 그때 정보는 input 태그에 file 타입을 기입해 요청에 이미지 등의 데이터를 담을 수 있도록 한다.
  3. 또한 해당 정보는 multipart 방식으로 인코딩 됨을 알 수 있다.
  4. 요청이 submit 되면, /uploads라는 서버 내 폴더에 정보를 넣을 수 있다.

http 요청/응답 과정에선 Start Line, Headers, Body이 존재한다고 설명한 적 있다.

여기서 body에 클라이언트가 전송하고자 하는 정보를 담을 수 있는데, 이때 해당 정보의 데이터 타입을 Content-Type이라고 하며 Headers가 해당 타입 정보를 담고 있다.

중요한 점은 body와 Content-Type 모두 한 가지 종류의 데이터 정보만을 담을 수 있다. 하지만, 위 form 정보는 이미지와 이미지를 설명하는 input으로 구성된다.

위와 같은 상황에서 여러 종류의 데이터를 하나의 요청 body에 담아 보내기 위해 multipart가 탄생했다는 설화를 알 수 있다!

참조

profile
개발이란?

0개의 댓글