[TIL] HTTP : The Definitive Guide "p395 ~ p400"

시윤·2026년 1월 21일

[TIL] Two Pages Per Day

목록 보기
150/153
post-thumbnail

Chapter 17. Content Negotiation and Transcoding

(해석 또는 이해가 잘못된 부분이 있다면 댓글로 편하게 알려주세요.)


✏️ 요약


Content-Negotiation Techniques

  • 클라이언트에게 적합한 콘텐츠를 선택하는 방법
  • Client-Driven
    • 서버가 여러 개의 선택지를 주고 클라이언트가 버전을 결정하는 방식
    • 장점 : 서버 사이드에서의 편리한 구현, 클라이언트가 최선의 선택을 할 수 있다
    • 단점 : 올바른 콘텐츠를 전달받기 위해 최소한 두 개의 요청이 필요하다, 여러 개의 URL이 필요하다 (메인 페이지와 각각의 상세 페이지 /english, /french 등)
  • Server-Driven
    • 서버가 클라이언트의 요청 헤더를 확인하여 버전을 결정하는 방식
    • 장점 : Client-Driven보다 낮은 지연, q-value 매커니즘을 활용할 수 있다
    • 단점 : 일치하는 버전이 없는 경우 서버가 추측하거나 폴백 처리해야 한다
  • Transparent
    • 중간 디바이스(프록시)가 클라이언트를 대신하여 버전을 결정하는 방식
    • 장점 : 웹 서버의 negotiation 부하 감소, Client-Driven보다 낮은 지연
    • 단점 : 표준 명세가 정의되어 있지 않다

Client-Driven Negotiation

  • 서로 다른 버전의 페이지와 연결된 HTML 문서와 각 버전에 대한 설명을 전송하는 방식
  • HTML/1.1 300 Multiple Choices 응답 코드를 전송하는 방식
  • 두 방식 모두 클라이언트 사이드에서 사용자에 의해 수동으로 버전이 결정된다

Server-Driven Negotiation

  • Accept와 같은 content-negotiation 헤더를 사용하는 방식
  • User-Agent와 같은 요청 헤더 값에 따라 적절한 버전을 결정하는 방식

Content-Negotiation Headers

Accept-Language: en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0
  • Accept : 어떤 미디어 타입을 허용하는지 전달하기 위한 헤더
  • Accept-Language : 어떤 언어를 허용하는지 전달하기 위한 헤더
  • Accept-Charset : 어떤 charset을 허용하는지 전달하기 위한 헤더
  • Accept-Encoding : 어떤 인코딩 방식을 허용하는지 전달하기 위한 헤더

** q-value를 사용하여 선호도를 명시할 수 있다

** 엔티티 헤더와의 차이점 -> 엔티티 헤더는 메시지를 전송하는 동안 반드시 필요한 속성을 명시하는 반면 Content-Negotiation 헤더는 버전 선택을 위한 속성 정보를 주고받는 데 사용된다

Varing on Other Headers

Vary: User-Agent
  • Accept-Encoding : 브라우저가 압축(gzip, br 등)을 지원하는지에 따라 다른 파일을 보내는 경우 주로 사용
  • User-Agent : 접속 기기(모바일, 데스크탑)에 따라 다른 파일을 보내는 경우 주로 사용
  • Accept-Language : 사용자의 언어 설정에 따라 다른 파일을 보내는 경우 주로 사용
  • * : 모든 요청에 대해 응답이 달라질 수 있으니 캐싱을 권장하지 않음

Transparent Negotiation

  • 프록시는 클라이언트가 기대하는 값이 무엇인지 알아야 한다
  • 프록시는 클라이언트의 요청에 가장 적절한 콘텐츠를 선택하기 위해 서버가 어떤 요청 헤더를 활용하는지 알아야 한다 (Vary 헤더 활용)
profile
틈틈이 두 페이지씩 원서 읽기

0개의 댓글