본문 바로가기
CS/데이터통신 & 네트워크

[네트워크] HTTP 컨텐츠 협상 (Contents Negotiation): Accept, Accept-Charset, Accept-Encoding, Accept-Language

by jangThang 2023. 7. 11.
반응형

 HTTP 헤더에는 클라이언트가 원하는 타입의 컨텐츠를 요구할 수 있는 Accept 속성이 있습니다. 이에 대해 알아봅니다.

 

[ Contents ]

     

     

    1. 컨텐츠 협상 (Contents Negotiation)

    클라이언트가 원하는 컨텐츠 타입을 서버에게 요청

     

     클라이언트는 서버에게 원하는 리소스(컨텐츠)를 요청하고, 서버로부터 응답 받습니다.

     그런데 같은 미디어라고 해도 형식이 여러가지고, 같은 내용이라고 해도 인코딩과 언어가 다를 수 있겠죠. 그래서 Header에 자세히 원하는 컨텐츠의 종류를 명시하며, 이를 컨텐츠 협상이라고 합니다.

     

     

    2. 협상 종류

    Accept: (클라이언트에서 원하는) 미디어 타입
    Accept-Charset: (클라이언트에서 원하는) 문자 인코딩
    Accept-Encoding: (클라이언트에서 원하는) 압축 인코딩
    Accept-Language: (클라이언트에서 원하는) 자연어 (ko, en 등)

     

     컨텐츠 협상 종류에는 미디어 타입, 문자/압축 인코딩, 언어 등이 있습니다.

     가끔씩 페이지가 깨져서 나올 때가 있는데, 이는 클라이언트에서 디코딩할 수 없는 컨텐츠 형식을 보냈기 때문입니다. 클라이언트는 원하는 컨텐츠 형식대로 보내줄 것을 요청하지만, 없을 경우 서버에서 기본값을 설정한 임의의 컨텐츠로 보내게 됩니다.

     

     

    3. 협상 우선순위

    GET /search
    Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

     

     Quality Values(q)를 사용하여 어떤 형식을 더 원하는지 우선순위를 부여할 수 있습니다. q는 0부터 1까지 지정할 수 있으며, 클수록 높은 우선순위입니다.

     백분율이 아니기 때문에 굳이 합을 1로 맞출 필요는 없으며 우선순위대로 대소관계만 고려하면 됩니다. 서버는 클라이언트의 협상 우선순위대로 가능한 응답을 보내줍니다.

     

    star가 되고나서 Tistory 내 요청 헤더

     예를 들어 한국 ip로 접속할 경우, Accept-Language는 보통 한국어 - 미국식 영어 - 유럽식 영어 순으로 우선순위가 부여됩니다.

     우선순위가 없는 경우에는 CSS와 비슷하게 구체적인 타입 순으로 배정됩니다. text/* 와 text/html 중에서는 text/html이 우선순위가 높습니다. 

     

     

    star가 되고나서 Tistory

    반응형

    댓글