MIME(Multipurpose Internet Mail Extensions)
MIME는 RFC 5322 프레임워크의 확장으로서, SMTP나 다른 메일 전송 프로토콜과 이메일 RFC 5322가 가진 문제점과 제약 사항을 해결하였다
또한, MIME은 이메일을 통해 비 ASCII 문자, 비디오, 오디오, 이미지 같은 이진 파일을 전송하기 위해 설계된 인터넷 표준이다
특징
- MIME는 이메일을 통해 다양한 형식의 데이터를 안전하게 전송할 수 있게 해줍니다.
- MIME 타입은 보통 "타입/하위 타입"으로 구성되어 있습니다.
- 예를 들어, "text/html"은 HTML 문서를 나타내는 MIME 타입입니다.
- MIME는 헤더 필드를 통해 메시지의 본문과 첨부파일에 대한 정보를 제공합니다.
등장 배경
MIME는 원래 SMTP와 같은 메일 전송 프로토콜에서 ASCII 문자만 지원하는 제한을 극복하기 위해 만들어졌습니다.
앞서 말한 이전 메일 전송 프로토콜들의 제한 사항을 설명하겠습니다
- SMTP는 실행 파일이나 바이너리 객체를 전송하지 못한다.
- SMTP는 텍스트 데이터를 전송하지 못한다
- SMTP 서버는 특정 크기를 넘는 메일 메시지를 거절한다
- ASCII 코드와 문자코드 EBCDIC 간 코드를 변환하는 SMTP 게이트 웨이는 변환 오류를 발생시킨다
- 일관적 매핑 집합을 사용하지 않기 때문
- SMTP의 어떤 구현은 SMTP 표준을 따르지 않기도 한다
MIME 요소
- RFC 5322 헤더에 포함 되는 5개의 메시지 헤더 필드
- 여러 가지 컨텐츠 형식 정의
- 멀티미디어 이메일을 지원하는 표현을 표준화
- 전송 인코딩 정의
- 모든 컨텐츠 형식을 메인 시스템에서 변경하지 못하게 보호된 형태로 변환
RFC 5322 헤더 필드 5가지
- MIME 버전
- 컨텐츠 유형
- 컨첸트 전송 인코딩
- 컨텐츠 ID
- 컨텐츠 표현
MIME 컨텐츠 유형
멀티파트 유형
바디가 다수 개의 독립적인 파트로 이뤄졌음을 나타낸다.
컨텐츠 유형 헤더 필드는 경계(boundary)라고 하는 매개 변수로 표시하는데, 이 변수는 본문의 파트를 구획문자(-)로 구분한다
- 각 시작 경계는 새 줄에서 시작하고, 2개의 하이픈(-)로 구성, 그 뒤에 경계 값을 붙인다
- 끝 경계는 마지막 파트의 끝을 나타내고 접미사로, 2개의 하이픈(-)을 사용한다
아래는 멀티파트 메시지의 예시이다
메시지 유형
- 메시지/rfc822 서브유형(message/rfc822 subtype)
- 메시지/부분 서브유형(message/partial subtype)
- 메시지/외부-본문 서브유형(message/external-body subtype)
MIME 전송 인코딩
컨텐츠 유형 명세 외에 MIME 규격의 다른 주요한 구성요소는 메시지 바디 전송 인코딩의 정의이다
전송 인코딩의 목적은 네트워크 환경에서 신뢰성 있는 전달을 하는 것이다
정규 형식
기본 형식(Native form)
- 전송될 본문을 시스템의 기본 형식으로 생성
- 기본 문자 세트를 사용하고 필요하다면 지역 종단에 특수한 관례를 따라 생성
정규 형식(Canonical form) - 레코드 길이와 파일 속성 정보 같은 대역외 정보까지 포함한 바디 전체를 통상적 정규 형식으로 변환
예제
HTTP 헤더의 MIME
HTTP 헤더는 HTTP 요청 또는 응답을 통해 클라이언트와 서버 간에 추가 정보를 전달하는 데 사용됩니다.
수신자가 어떤 종류의 데이터가 전송되고 있는지 알 수 있도록 이러한 헤더에 MIME 유형을 지정할 수 있습니다.
'Content-Type’은 요청 또는 응답 본문의 MIME 유형을 지정하는 HTTP 헤더 중 하나입니다.
이 헤더 뒤에는 text/html
, application/json
, image/jpeg
등과 같은 MIME 유형이 옵니다.
예를 들어 서버가 클라이언트에 HTML 파일을 보내는 경우 다음 HTTP 헤더가 포함됩니다
Content-Type: text/html
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'Computer Science > 네트워크' 카테고리의 다른 글
TLS 세션 (0) | 2023.05.15 |
---|---|
HTTP (0) | 2023.05.13 |
NAT (0) | 2023.05.04 |
다익스트라 알고리즘(Dijkstra's Algorithm) (0) | 2023.04.24 |
링크 상태 알고리즘(Link State Algorithm) (0) | 2023.04.24 |