질문 정리

HTTP Content Type과 Retrofit

five2week 2024. 1. 12. 12:49

프로젝트를 새로 시작하게 되었는데, 서로 코드 리뷰를 하던 도중 오랜만에 application/json를 Content-Type으로 붙인 것을 발견하여 정리하게 되었습니다.

Content-Type

HTTP Content Type, 또는 MIME 타입은 HTTP 헤더에서 사용되는 문자열로, 통신하는 상대방에게 데이터의 형식을 알려주는 역할을 합니다.

 

안드로이드 개발을 막 시작했던 초반에는 해당 content-type을 항상 header에 붙였습니다.

 

@Header("Content-Type") contentTypeHeader: String = "application/json"

 

 

Retrofit을 사용하고 있다면, header에 "application/json"은 붙이지 않아도 됩니다. 

Retrofit.Builder()
    .client(okHttpClient)
    .baseUrl("https://")
    .addConverterFactory(GsonConverterFactory.create())
    .build()
    .create(ApiService::class.java)

GsonConverterFactory을 넣어서 JSON 형식의 @Body 데이터에 대해 자동으로 Content-Type: application/json 을 설정합니다. 따라서 대부분의 경우에는 이를 명시적으로 설정할 필요가 없습니다.

 

또한 @GET 어노테이션으로 표시된 메소드에서 Content-Type 헤더를 설정하는 것은 일반적으로 필요하지 않습니다. GET 요청은 서버로부터 데이터를 검색하는 데 사용되며, 보통 요청 본문을 포함하지 않습니다. Content-Type은 주로 요청 본문의 데이터 형식을 서버에 알려주는 데 사용되므로, 본문이 없는 GET 요청에서는 필요하지 않습니다.

 

대표적인 Content-Type의 종류

Content  TypeDescription
text/html HTML 문서를 나타냅니다. 대부분의 웹 페이지가 이 형식을 사용합니다.
text/plain 일반 텍스트를 나타냅니다. 어떠한 서식도 없는 순수 텍스트입니다.
image/jpeg JPEG 형식의 이미지를 나타냅니다.
image/png PNG 형식의 이미지를 나타냅니다.
image/gif GIF 형식의 이미지를 나타냅니다.
application/json JSON 형식의 데이터를 나타냅니다. 웹 API에서 많이 사용됩니다.
application/javascript JavaScript 코드를 나타냅니다.
application/xml XML 문서를 나타냅니다. RSS 피드 등에서 사용됩니다.
application/pdf PDF 문서를 나타냅니다.
multipart/form-data 파일 업로드와 같은 폼 데이터를 나타냅니다.

 

더 많은 종류에 대해서는 다음 링크에서 확인할 수 있습니다.

https://www.iana.org/assignments/media-types/media-types.xhtml