HTTP

HTTP 완벽 가이드 (17)

kchabin 2025. 3. 18. 01:57

내용협상 : 하나의 URL이 여러 가지 리소스 중 적합한 것에 대응되도록 함

트랜스코딩 : HTTP 클라이언트와 서버 사이의 내용 협상에 대한 응답에서 수행됨

  • 커스터마이징 페이지 생성 → ex) 구형 단말기에 맞도록 HTML에서 WML 페이지로 변환

내용 협상 기법

클라이언트 주도 기법, 서버 주도 기법, 투명 기법

  • 서버는 선택지를 주고, 클라이언트가 선택
  • 서버가 요청 헤더를 검증해서 어떤 버전을 제공할지 결정
  • 투명한 중간 장치(주로 프락시 캐시)가 서버를 대신하여 협상

클라이언트 주도 기법

장점 : 서버 입장에서 가장 구현하기 쉽고, 클라이언트는 최선의 선택 가능

단점

  • 각 페이지에 두 번의 요청 필요 → 한번은 가능한 페이지 목록, 두번째는 선택한 사본 얻기

선택지 표현 방법

  1. 여러 가지 버전에 대한 링크와 각각에 대한 설명이 담긴 HTML 페이지
    1. 브라우저 사용자에 의해 수동으로 결정됨.
  2. 300 Multiple Choices 코드로 HTTP/1.1 응답 돌려주기
  3. HTTP/1.1 300 Multiple Choices Date: Fri, 30 Aug 2024 09:21:48 GMT Server: Apache/2.4.59 (Unix) Alternates: {"index.html.en" 1 {type text/html} {language en} {length 48}}, {"index.html.fr" 1 {type text/html} {language fr} {length 45}} Vary: negotiate,accept-language TCN: list Content-Length: 419 Content-Type: text/html; charset=iso-8859-1 <html><head> <title>300 Multiple Choices</title> </head><body> <h1>Multiple Choices</h1> Available variants: <ul> <li><a href="index.html.en">index.html.en</a> , type text/html, language en</li> <li><a href="index.html.fr">index.html.fr</a> , type text/html, language fr</li> </ul> </body></html>

증가된 대기시간, 페이지당 여러번 요청

여러 개의 URL 요구

서버 주도 협상

  1. 내용 협상 헤더 → Accept 관련 헤더
  2. User-Agent 헤더 기반 응답

| Accept | 서버가 어떤 미디어 타입으로 보내도 되는지 알려줌

  • Content-Type | | --- | --- | | Accept-Language | 어떤 언어로 보내도 되는지
  • Content-Language | | Accpet-Charset | 어떤 차셋으로 보내도 되는지
  • Content-Type | | Accept-Encoding | 어떤 인코딩으로 보내도 되는지
  • Content-Encoding |
  • 엔티티 헤더는 라벨. 내용 협상 헤더들은 클라이언트와 서버가 선호 정보를 서로 교환하고 가장 잘맞는 문서를 제공하기 위한 목적
  • HTTP는 무상태 → 매 요청마다 자신의 선호 정보를 보내야 함.

 

품질값

선호도

Accept-Language: en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0
  • 클라이언트가 받아들일 수 있는 언어의 선호도를 품질값으로 표현
  • 서버가 선호에 대응하는 문서를 하나도 갖고 있지 않다면 문서를 고치거나 트랜스코딩
  • User-Agent → 오래된 브라우저가 JS를 지원 안하는 것을 알고 있다면 JS를 포함하지 않은 페이지를 돌려줌
  • 캐시 목적은 올바른 ‘최선의’ 버전으로 캐시된 문서를 제공하려함.

→ Vary 헤더 : 서버가 내중 응답의 ‘최선의 버전’을 결정하기 위해 어떤 요청 헤더를 참고하고 있는지 말해줌.

아파치 내용 협상

https://httpd.apache.org/docs/2.4/content-negotiation.html

  1. type-map 파일
URI: foo

URI: foo.en.html
Content-type: text/html
Content-language: en

URI: foo.fr.de.html
Content-type: text/html;charset=iso-8859-2
Content-language: fr, de

Understanding The Vary Header — Smashing Magazine

Vary

캐시에게 서버가 내줄 응답의 최선의 버전을 결정하기 위해 어떤 요청 헤더를 참고하고 있는지 말해주는 헤더.

Vary: *
Vary: <header-name>, <header-name>, ...

  • * : 요청 헤더 이외의 요소가 이 응답 생성에 영향을 미쳤음, 응답이 캐시할 수 없음을 의미
  • <header-name> : 응답 생성에 영향을 줄 수 있는 요청 헤더 이름을 쉼표로 구분

트랜스 코딩

서버가 클라이언트의 요구에 맞는 문서를 아예 갖고 있지 않다면?

  1. 에러 응답
  2. 기존 문서 변환 → 트랜스 코딩

포맷 변환

예시

  • 고해상도 이미지 → 저해상도 이미지
  • 광고가 있는 페이지 → 광고가 없는 페이지
  • 컬러 → 흑백

내용 협상 헤더에 의해 주도됨(User-Agent 헤더에 의해 주도될 수도 있음)

  • 콘텐츠 인코딩, 전송 인코딩과는 다름 → 더 효율적이고 안전한 전송
  • 트랜스코딩은 특정 접근 장치에서 볼 수 있도록 하기 위함

정보 합성

문서에서 정보의 요점을 추출하는 것

  • 각 절의 제목에 기반한 문서의 개요 생성
  • 페이지 광고 및 로고 제거
  • 본문 키워드 기반 페이지 분류 기술 → 문서 핵심 요약에 유용
    • 자동화된 웹페이지 분류 시스템

콘텐츠 주입

이전 두개는 일반적으로 웹 문서의 양을 줄임.

↔ 오히려 양을 날리는 변환 : 내용 주입 트랜스코딩(content-injection transcoding)

  • 자동 광고 생성
  • 사용자 추적 시스템

대안 - 웹서버에서 여러 가지 사본을 만들기(정적으로 미리 생성)

단점

  • 수정 증가
  • 많은 저장 공간 필요
  • 관리하고 제공하는 웹 서버 프로그래밍이 어려워짐
  • 동적(타깃광고삽입등) → 정적 불가능
    • 페이지를 요청한 사용자에 따라 어떤 광고가 삽입될지 다름

루트 페이지를 필요할 때마다 변환 → 콘텐츠 제공 대기시간 증가 문제

  • 변환은 더 싼 프락시나 캐시에 있는 외부 에이전트에 의해 수행될 수 있음.

'HTTP' 카테고리의 다른 글

HTTP 완벽 가이드 (19)  (0) 2025.03.18
HTTP 완벽 가이드 (18)  (0) 2025.03.18
HTTP 완벽 가이드 (16)  (0) 2025.03.18
HTTP 완벽 가이드 (15)  (0) 2025.03.15
HTTP 완벽 가이드 (14)  (0) 2025.03.15