Accept 매개변수는 서버에서 전송된 클라이언트 응답에 예상되는 데이터 유형을 정의하기 때문에 응답 헤더로 사용되는 것으로 알고 있습니다.
저의 질문은 content-type에 관한 것인데, 클라이언트가 보낸 요청의 본문 형식을 정의하기 위해 content-type을 사용합니다. 항상 클라이언트 요청의 일부로 사용했기 때문에 Accept와 content-type으로 헤더를 설정하는 클라이언트 요청이 있습니다. 그리고 최근에 응답 헤더에 content-type이 정의되어 있는 프로젝트를 접하게 되었다(그래서 서버가 보낸 것이다). 그래서 저의 질문은: content-type은 클라이언트 요청 헤더의 일부 또는 서버 응답 헤더의 일부로 설정되어야 하나요, 아니면 둘 다로 설정될 수 있는가?
답변
RFC7231을 보시면
"Accept" 헤더 필드는 사용자 에이전트가 사용 가능한 응답 매체 유형을 지정하는 데 사용될 수 있습니다 .
"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 |