본문 바로가기

server/http

Difference between the Accept and Content-Type HTTP headers

https://stackoverflow.com/questions/35722586/header-parameters-accept-and-content-type-in-a-rest-context

 

Accept 매개변수는 서버에서 전송된 클라이언트 응답에 예상되는 데이터 유형을 정의하기 때문에 응답 헤더로 사용되는 것으로 알고 있습니다.

저의 질문은 content-type에 관한 것인데, 클라이언트가 보낸 요청의 본문 형식을 정의하기 위해 content-type을 사용합니다. 항상 클라이언트 요청의 일부로 사용했기 때문에 Accept와 content-type으로 헤더를 설정하는 클라이언트 요청이 있습니다. 그리고 최근에 응답 헤더에 content-type이 정의되어 있는 프로젝트를 접하게 되었다(그래서 서버가 보낸 것이다). 그래서 저의 질문은: content-type은 클라이언트 요청 헤더의 일부 또는 서버 응답 헤더의 일부로 설정되어야 하나요, 아니면 둘 다로 설정될 수 있는가?

 

 

답변

RFC7231을 보시면

 

5.3.2. Accept

"Accept" 헤더 필드는 사용자 에이전트가 사용 가능한 응답 매체 유형을 지정하는 데 사용될 수 있습니다 .

 

3.1.1.5. 컨텐츠 타입

"content-type" 헤더 필드는 미디어 유형을 나타냅니다.

 

Accept는 클라이언트가 수락 할 수 있는 서버 응답 유형을 나타냅니다 . 

Content-type는 항상 현재 요청 또는 응답의 내용에 관한 것입니다.

 

따라서 요청에 페이로드가 없는 경우 컨텐츠 유형 요청 헤더를 사용하지 않습니다.

 


 

즉 Accept는 클라이언트가 어떤 컨텐츠 타입으로 받고 싶은가 를 뜻한다.

content-type은 어떤 컨텐츠 타입을 보내는가를 뜻한다.

 

항상 헷갈리는 부분이여서 정리했다. (언젠가 content-type 별로 정리 해봐야겠다.)

 

django rest freamk를 쓸때 api 요청시 html로 오면 url뒤에 ?format=json 으로 하면 json형식으로 주긴하지만,

정석대로 한다면 헤더에 "Accept": "application/json" 을 추가해서 전송하면 된다.

 

 

'server > http' 카테고리의 다른 글

http status 307  (0) 2023.02.16
cors 쉽게 이해하기  (0) 2019.11.23
SSL / TLS  (0) 2018.12.14
http 통신  (0) 2018.12.07
http 동작 방식  (0) 2018.12.06