HTTP 메시지에는 거의 모든 데이터를 보낼 수 있습니다. 예를들어 이런 것들이 있습니다.
HTML, TEXT
Image, 음성, 영상, 파일
JSON, XML
그리고 특정 타입의 데이터를 보낼 때는, 수신자에게 특정 타입임을 명시해주어야 합니다.
만약 명시하지 않는다면 데이터의 호환성 문제나 보안 문제 등이 있을 수 있습니다. Content-Type 에 대해서는 아래에서 더 자세히 다루겠습니다.
타입, Content-Type
HTML, 텍스트
HTML 데이터 : Content-Type: text/html
일반 텍스트 : Content-Type: text/plain
이미지, 음성, 영상, 파일
이미지 (JPEG, PNG 등) : Content-Type: image/jpeg, Content-Type: image/png 등
이미지 형식에 따라 달라짐
음성 파일: Content-Type: audio/mpeg (MP3 등), Content-Type: audio/wav (WAV 파일) 등
오디오 형식에 따라 달라짐
영상 파일: Content-Type: video/mp4 (MP4 파일), Content-Type: video/mpeg (MPEG 파일) 등
비디오 형식에 따라 달라짐
일반 파일: Content-Type: application/octet-stream
또는 파일 형식에 따라 구체적인 MIME 타입을 지정 (예: PDF 파일은 Content-Type: application/pdf).
JSON, XML (API)
JSON 데이터 : Content-Type: application/json
XML 데이터: Content-Type: application/xml 또는 Content-Type: text/xml
Appendix
Content-Type
Content-Type 이란
HTTP 헤더의 일종으로, 클라이언트(예: 웹 브라우저)와 서버 간에 데이터를 주고받을 때 해당 데이터의 미디어 타입을 지정하는 데 사용됩니다. 이 헤더는 전송되는 데이터의 유형과 형식을 명시하여, 수신자가 데이터를 어떻게 처리해야 할지 결정하는 데 도움을 줍니다.
헤더의 구조
Content-Type 헤더는 미디어 타입과 서브 타입으로 구성됩니다.
미디어 타입은 데이터의 기본 유형을 나타내는 것으로 text, image, application 등이 있습니다.
서브 타입은 미디어 타입을 더 구체적으로 지정한 것 입니다. 예를 들어 같은 텍스트 타입 일지라도 html 페이지는 text/html 을, 텍스트는 text/plain 입니다. 이미지도 image/jpeg, image/png 등이 있습니다.
Content-Type 을 명시하지 않는다면
따로 명시하지 않는다면 Content-Type 은 application/octet-stream 입니다. 8비트로 된 데이터 라는 뜻을 말합니다. 다른 데이터들이 application/json, image/jpeg, text/plain 등 처럼 구체적이지는 않습니다. 아마 이 데이터는 기본값이니까 이대로 다루면 안돼! 이런 의미일 듯 합니다.
실제로도 최근에 안드로이드 개발을 하던 친구가 서버 개발자가 내려준 데이터의 Content-Type 이 application/octet-stream 으로 되어있어 읽을 때 오류가 났다는 이야기를 해준 적이 있습니다.
그러나 따로 명시하지 않았는데도 Content-Type 을 문제없이 주고받았던 기억이 있는데요, 어떻게 된걸까요? 웹서버와 브라우저, 프레임워크 등에서 데이터를 보고 적절한 타입을 넣어주었기 때문입니다.
그러나 어디까지나 추론이기 때문에 정확하지 않을 수 있습니다. 때문에 Content-Type 을 명시하여주는 것이 좋습니다.
Content-Type 과 데이터
HTTP 메시지에는 거의 모든 데이터를 보낼 수 있습니다. 예를들어 이런 것들이 있습니다.
그리고 특정 타입의 데이터를 보낼 때는, 수신자에게 특정 타입임을 명시해주어야 합니다. 만약 명시하지 않는다면 데이터의 호환성 문제나 보안 문제 등이 있을 수 있습니다. Content-Type 에 대해서는 아래에서 더 자세히 다루겠습니다.
타입, Content-Type
Content-Type: text/html
Content-Type: text/plain
Content-Type: image/jpeg
,Content-Type: image/png
등Content-Type: application/json
Content-Type: application/xml
또는Content-Type: text/xml
Appendix
Content-Type
Content-Type 이란
HTTP 헤더의 일종으로, 클라이언트(예: 웹 브라우저)와 서버 간에 데이터를 주고받을 때 해당 데이터의 미디어 타입을 지정하는 데 사용됩니다. 이 헤더는 전송되는 데이터의 유형과 형식을 명시하여, 수신자가 데이터를 어떻게 처리해야 할지 결정하는 데 도움을 줍니다.
헤더의 구조
Content-Type 헤더는 미디어 타입과 서브 타입으로 구성됩니다.
미디어 타입은 데이터의 기본 유형을 나타내는 것으로 text, image, application 등이 있습니다. 서브 타입은 미디어 타입을 더 구체적으로 지정한 것 입니다. 예를 들어 같은 텍스트 타입 일지라도 html 페이지는 text/html 을, 텍스트는 text/plain 입니다. 이미지도 image/jpeg, image/png 등이 있습니다.
Content-Type 을 명시하지 않는다면
따로 명시하지 않는다면 Content-Type 은
application/octet-stream
입니다. 8비트로 된 데이터 라는 뜻을 말합니다. 다른 데이터들이application/json
,image/jpeg
,text/plain
등 처럼 구체적이지는 않습니다. 아마 이 데이터는 기본값이니까 이대로 다루면 안돼! 이런 의미일 듯 합니다. 실제로도 최근에 안드로이드 개발을 하던 친구가 서버 개발자가 내려준 데이터의 Content-Type 이application/octet-stream
으로 되어있어 읽을 때 오류가 났다는 이야기를 해준 적이 있습니다.그러나 따로 명시하지 않았는데도 Content-Type 을 문제없이 주고받았던 기억이 있는데요, 어떻게 된걸까요? 웹서버와 브라우저, 프레임워크 등에서 데이터를 보고 적절한 타입을 넣어주었기 때문입니다. 그러나 어디까지나 추론이기 때문에 정확하지 않을 수 있습니다. 때문에 Content-Type 을 명시하여주는 것이 좋습니다.