질문
HTTP 헤더 중 Content-Type과 Accept 헤더의 역할을 설명하고, 클라이언트와 서버 간 데이터 전송 시 MIME 타입이 어떻게 활용되는지 구체적으로 밀씀해주세요. 그리고 Content-Type 설정이 잘못될 경우 발생할 수 있는 문제점과 이를 해결하는 방법에 대해 설명해주세요.
질문의도
클라이언트와 서버가 주고받는 데이터 형식을 어떻게 명확히 지정하는지, 잘못된 설정으로 인해 발생할 수 있는 문제(예: 데이터 처리 오류, 보안 취약점)와 그 해결 방안을 논리적으로 설명할 수 있는지를 확인하려는 의도입니다.
Content-Type
•
역할: 클라이언트가 서버에 데이터를 보낼 때, 서버가 클라이언트로부터 받은 데이터를 어떻게 해석해야하는지를 알려주는 이정표(?)
•
예시: "Content-Type": "application/json" 일 경우 서버에게 "나는 JSON 형식의 데이터를 보내고 있어" 라고 알려줄 수 있다.
Accept
•
클라이언트가 서버에게 요청할 때, 원하는 데이터 유형을 말한다.
•
예시: "Accept": "application/json" 일 경우 서버에게 "JSON 형식의 응답을 줘" 라는 요청
MIME 타입
•
type/subtype 유형으로 되어있다.
•
type은 video, text, application 등이 있고, 타입에는 discrete, multipart라는 두가지의 클래스가 존재한다.
•
Discrete
◦
정의: Discrete MIME 타입은 단일한 데이터 형식을 나타내며, 하나의 연속적인 데이터 스트림으로 처리되고, 각 MIME 타입은 고유한 형식으로만 구성.
◦
예시:
text/plain: 일반 텍스트
application/json: JSON 데이터
image/jpeg: JPEG 이미지
•
Multipart
◦
정의: Multipart MIME 타입은 여러 개의 다른 데이터 형식이 하나의 메시지로 결합된 형태
◦
예시:
multipart/form-data: 파일 업로드를 위한 폼 데이터 (예: 이미지와 텍스트를 함께 전송)
multipart/mixed: 서로 다른 형식의 데이터가 혼합된 경우
Content-Type이 잘못 설정된 경우
•
서로 약속된 Type으로 데이터 처리를 해야하는 입장에서 MIME 타입이 안맞을 경우 프로덕트의 비지니스 로직의 문제가 생길 수 있다.
•
예시:
클라이언트가 JSON 데이터를 Content-Type: text/plain으로 보낼 경우 서버는 데이터를 문자열로 처리하게 되기 때문에 원본데이터의 문제가 생길 위험이 있다.
해결 방법
•
API 문서에서 Request의 Media type을 명시한다
•
Content-Type에 대한 유효성 검사를 추가한다