Content-Negotiation?
클라이언트와 서버가 있다고 하자. 클라이언트가 원하는 표현으로 달라고 서버한테 요청을 한다. 그렇다면 서버는 클라이언트가 원하는 우선순위에 맞춰서 표현 데이터를 만들어 준다.
클라이언트가 선호하는 표현 요청
예를 들어서 내가 한국어 브라우저를 사용한다고 하자. 그리고 외국에 있는 /event
라는 사이트에 접속한다. 이 사이트는 다중 언어를 지원하는 서버인데 우선순위가 기본으로는 영어를 지원하고 한국어 또한 지원한다.
그런데 클라이언트가 보낸 요청 메시지에는 클라이언트가 원하는 언어가 한국어인지 나타나 있지가 않다. 그렇기 때문에 서버는 클라이언트에게 기본 언어인 영어로 지원한다.
클라이언트에서 서버에 요청을 할 때 Accept-Language: ko
를 요청 메시지에 포함한다. 서버는 한국어를 지원하고 클라이언트가 한국어를 원한다는 것을 알기 때문에 기본 언어는 영어이지만 콘텐츠 네고시에이션에 따라서 서버는 클라이언트에게 한국어로 지원한다.
그렇다면 클라이언트가 한국어를 요청했지만 서버의 기본 언어가 독일어이고, 한국어를 지원하지 않는다면?
대부분의 경우 독일어보다는 영어가 익숙하기 때문에 그나마 익숙한 영어로 지원해주기를 바랄 것이다. 이런 경우 때문에 우선순위가 필요한 것이다.
Quality Values(q) 값 사용
Google에 hello를 검색한 결과
표의 text/plain은 Accept에서 정확히 매칭되는 것이 없기 때문에 text/*
에 속한다. 따라서 Quality가 0.3이다.
클라이언트가 서버에 요청을 하면 서버는 요청에 따라서 응답을 주는데 Content-Length를 포함해서 응답 데이터의 길이를 알 수 있게 해준다.
서버에서 응답을 보낼 때 메시지 바디 부분을 압축해서 보내준다. 이때 Content-Encoding이라는 것이 있어야 한다.
Transfer-Encoding: chunked는 데이터를 쪼개서 보낸다는 뜻이다. 즉, 데이터를 분할해서 전송하는 것이다.
Content-Range를 이용해서 데이터의 범위를 지정해서 요청이 가능하다.
출처
모든 개발자를 위한 HTTP 웹 기본 강의
해당 게시물의 사진 자료는 위 강의의 자료를 사용하였습니다.