티스토리 뷰

MIME TYPE이란

 


이미지나 사진 동영상 파일등은 바이너리 데이터이다. 즉 0과 1의 조합으로 구성되어 있다. 초기 이메일 시스템에서는 본문에 들어갈 텍스트 뿐만 아니라 첨부파일도 전송 가능하게 하기 위해서 바이너리 데이터인 첨부파일을 아스키 코드로 인코딩하는 방법을 찾아야 했다. 즉, 이메일은 아스키 코드로만 주고 받고 할 수 있었다.


MIME이란 Multipurpose Internet Mail Extension 이란 뜻인데, 보면 다목적의 인터넷 메일 확장이라는 뜻이다. 즉, 바이너리 데이터인 첨부파일을 아스키 코드로 인코딩하여 본문에 덧붙이겠다는 뜻이다.(EXtension의 의미)


보낼때 인코딩된 바이너리 데이터(사진,이미지등)가 어떤 타입인지를 명시해야 받는 측에서 그것대로 해석 할 수 있다.



보면 aaa.png라는 이미지를 마임 타입으로 변환하여 전송하고 수신자는 마임타입을 다시 원본 바이너리 데이터로 복호화 한다. 즉, 마임 타입이란 바이너리 -> 아스키 인코딩 방식이라고 보면 될 것 같다. 그리고, 그 바이너리 데이터가 어떤것이냐를 마임 타입에 명시한다. 그래야, 받는 측에서 제대로 복호화 할 수 있으니까


MIME TYPE의 구성

 


메인타입


MIME TYPE은 메인타입/서브타입 식으로 구성된다. 예를 들면 image/jpeg, image/png 등과 같이 표현 된다.


application/octet-stream (이진데이터(메인)/8비트 스트림(서브))

8비트 단위로 해석되는 이진 데이터 타입이다.


multipart/form-data (여러타입/HTML의 form 데이터)
아래 html의 form태그를 보면, 여러개의 MIME타입이 복합적으로 서버에 묶여서 전송 될 수 있다. 바이너리 데이터와 텍스트가 동시에 전송 될 수 있기 때문에 주타입이 Multipart인것이고 부타입이 form-data인것이다. 사용자가 이 폼에 데이터를 입력해서 전송 버튼을 누르게 되면 서버로 http post방식으로 전송이 되는데 http 바디 부분에 입력값이 담기게 되는데, 그 각각의 입력값들은 구분자를 통해 구분된다. 각 입력값 마다 마임 타입이 다르기 때문에 해석 방법이 달라져야 한다. 그렇기 때문에 구분자로 구분을 해놓아야 한다.

1
2
3
4
5
6
7
<form action="/inserProfile" method="post" enctype="multipart/form-data">
  이름 : <input type="text" name="userName"><br>
  성별 : <input type="checkbox" name="male"></input>
         <input type="checkbox" name="female"></input><br>
  사진 : <input type="file" name="profileImage"><br>
         <input type="submit" value="전송">
</form>
아래는 HTTP Request 패킷에 어떤식으로 위의 입력값들이 담기는지 보여주는 예시이다. 헤더부분을 보면 Content-Type을 명시하여 바디 부분에 들어간 데이터가 html의 form태그를 통해 전송된 데이터임을 명시하고, boundary(구분자)를 통해서 각 입력값들을 구분하겠다고 명시한다.

이미지 바이너리 데이터는 아스키 코드로 변환된 형태로 존재할것으로 예상된다(확실하지않다)



HTTP에서 사용되는 MIME TYPE들

 

application/x-www-form-urlencoded

  • text/plain
  • multipart/form-data
  • HTTP에서 사용되는 마임 타입들이다. GET방식의 경우에는 http 요청 바디부분에 아무것도 들어가지 않기 때문에, 헤더의 컨텐츠 타입부분에 아무것도 넣지 않아도 된다. 하지만 POST방식에는 헤더의 컨텐츠 타입 부분을 반드시 명시해야 이 HTTP 패킷을 수신한 측에서 정확하게 복호화 할 수 있다.


    application/x-www-form-urlencoded
    HTTP 요청 바디 부분에 KEY & VALUE의 형태의 입력값이 포함된다.

    text/plain
    HTTP 요청 바디 부분에 텍스트가 들어간다.

    multipart/form-data
    HTTP 요청 패킷 바디 부분에 boundary라고 불리는 구분자를 통해 html의 form태그의 각 입력값들이 구분되어져서 들어가 있는 형태이다.

    각 입력값 마다 마임 타입이 다르기 때문에 주타입이 multipart인것이다. 즉, 여러개의 파트로 구성되어 있다는 의미.

    왜 구분자를 통해서 입력값을 구분했냐면, HTML의 form태그에서는 텍스트 뿐만 아니라 바이너리 데이터도 인풋으로 담을 수 있기 때문이다. 바이너리 데이터는 GET방식에서의 구분자인 &을 구분자가 아닌 데이터로 인식하기 때문에 &이 아닌 다른 것으로 boundary라는것이 각 인풋을 구분하기 위해서 필요한것이다.




    출처: http://mommoo.tistory.com/60 [개발자로 홀로 서기]

    출처: http://dololak.tistory.com/130 [코끼리를 냉장고에 넣는 방법]







    '컴퓨터 공학과 졸업 > 기본 개념' 카테고리의 다른 글

    [퍼옴]도메인이란  (0) 2018.08.03
    웹 프로그램의 파일 구조  (0) 2018.07.27
    HTTP  (0) 2018.06.28
    URI = URL + URN  (0) 2018.06.26
    DBCP  (0) 2018.02.14
    댓글
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/04   »
    1 2 3 4 5 6
    7 8 9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30
    글 보관함