들어가기 전
파일 업로드 기능을 사용할 때 파일 타입에 따라 달라지는 Content-Type에 대해 궁금해서 글을 작성한다. 또한 MIME에 대해서도 작성한다.
본문
1. MIME Type
MIME 란 업로드 시 파일의 유형정보를 알려주는 것으로 메시지 유형을 정의하기 위한 인터넷 표준이다.
각 문서와 함께 올바은 MIME Type을 전송하도록 서버가 정확히 설정하여 브라우저들이 리소스를 내려받았을 때 해야 할 기본 동작이 무엇인지를 결정하기 위해 MIME Type을 사용한다. 즉, 웹에서 파일 및 데이터의 형식을 식별하는 데 널리 사용된다.
text/html | HTML 문서 |
image/jpeg | JPEG 이미지 |
application/json | JSON 데이터 |
이전에는 텍스트 파일을 주고 받는데에 ASCII로 공통된 표준에 따르기만 하면 문제가 없었으나, 네트워크를 통해 ASCII가 아닌 바이너리 파일을 보내는 경우가 생기게 되었다. 음악파일, 워드파일 등등 ASCII만으로는 전송이 안되기 때문에 기존 시스템에서 문제 없이 전달하기 위해서는 텍스트로 변환이 필요했다. 이와 같이 바이너리 파일 → 텍스트 파일로 변환하는 것을 인코딩, 텍스트 파일 → 바이너리 파일로 변환하는 것을 디코딩이라고 한다.
우리가 많이 사용하는 jpg, png,exe 같은 파일들이 모두 바이너리 파일에 속하는데, 바이너리 파일은 사용자나 프로그램이 사용한 값들을 특별한 가공없이 파일에 그대로 저장한다. 만약에 프로그램이 10이라는 값을 생성한다면 어떠한 변화나 대체없이 그대로 10이 기록된다. 하지만 바이너리 파일은 이러한 특징 때문에 해당 파일을 제대로 읽기 위해서 제대로 읽을 수 있는 프로그램이 필요하다. 10,2,30 이러한 숫자의 연속을 그대로 해석할 수 없기 때문이다. png 파일 등을 메모장에서 열어보면 알 수 없는 문자들이 나타나는 것이 이러한 이유 때문이다.
바이너리 파일들을 ASCII 처럼 하나의 규약으로 변환해서 읽을 수 있는 것이 아니라 값을 그대로 저장하기에 이를 해석하는 일에 문제가 생기고 이러한 문제를 해결하기 위해 MIME 인코딩이 필요하다. 인코딩한 파일은 Content-Type 정보를 앞부분에 담게되며 Content-Type에 대한 설명은 다음과 같다.
2. Content Type
Content Type은 HTTP 헤더의 일종으로, 서버가 클라이언트에게 보내는 데이터의 MIME Type을 명시하는 데 사용된다. 클라이언트는 이 정보를 통해 응답의 내용을 올바르게 해석할 수 있다. 간단하게 이야기 하면 Content-Type은 MIME 값으로 설정되어 있다.
Content-Type의 종류는 아래 말고도 다양한 타입이 존재한다. 일단 이 중에서 중점적으로 포스팅해볼 타입은 application/octet-stream 이다. application의 기본 타입으로 바이너리 파일인데 추가적인 타입 정보를 제공하지 않았기 때문에 기본타입으로 설정되는 것 같다.
Content-Type: text/html | html, php, jsp, asp 등 |
Content-Type: application/json | json |
Content-Type: image/jpg | 이미지 파일 |
Content-Type: image/pdf | |
Content-Type: application/octet-stream | exe, bin, class - 응용 프로그램(실행파일) |
'Knowledge' 카테고리의 다른 글
[Knowledge] 360XSS (1) | 2025.03.09 |
---|---|
[Knowledge] MITM 공격 (0) | 2025.03.01 |
[Knowledge] 싱글 페이지 애플리케이션(Single Page Application) (0) | 2024.11.04 |
[Knowledge] REST / REST API / RESTful (0) | 2024.08.31 |
[Knowledge] RSA 암호화 알고리즘 (0) | 2024.08.21 |