인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약
이미지 파일을 전송한다고 해서 이메일에 첨부파일을 붙여 메일을 보내는 것처럼 png나 jpg 파일 자체가 전송되는 것이 아니다.
이미지 파일도 문자로 이뤄져 있기 때문에 이미지 파일을 문자로 생성하여 HTTP request body에 담아 서버로 전송하는 것이다.
HTTP(requset외 response)는 위 이미지와 같이 4개의 파트로 나눌 수 있다.
여기서 Message Body에 들어가는 데이터 타입을 HTTP Header에 명시해줄 수 있다.
이 때 명시할 수 있도록 해주는 필드가 바로 Content-Type 이다.
추가적으로 Content-Type 필드에 MIME(Multipurpose Internet Mail Extensions) 타입을 기술해줄 수 있는데, 여러 타입 중 하나가 바로 multipart이다.
form은 입력 양식 전체를 감싸는 태그이다.
HTML의 input의 type 중에 'file'이 있다.
이건 파일 업로드를 위한 input 컨트롤이다. 즉, 사용자 컴퓨터에서 서버로 파일을 전송하기 위한 input이다.
form이 submit이 되면 form안에 있는 컨트롤들의 데이터가 서버로 전송된다. 이때 이런 데이터들은 HTTP Request 형태로 서버로 전송된다. 파일 업로드의 원리는 HTTP Request가 가지고 있는데,
그 원리는 아래와 같다.
일반적인 form의 submit에 의한 데이터들의 Content-type은 application/x-www-form-urlencoded 이다.
그런데 파일 업로드의 상황을 살펴보면, 만약 자신이 찍은 사진을 올리는 form의 경우, 사진에 대한 설명을 위한 input과 사진 파일을 위한 input 2개가 들어간다.
그런데 이 두 input 간에 Content-type이 전혀 다르다.
이 두 input 간에 Content-type은 사진 설명은 application/x-www-form-urlencoded 이 될 것이고,
사진 파일은 image/jpeg이다.
한 Body에서 이 2 종류의 데이터를 구분에서 넣어주는 방법도 필요해졌다.
그래서 등장하는 것이 multipart 타입이다.
출처: https://velog.io/@shin6403/HTTP-multipartform-data-%EB%9E%80