내용협상 : 하나의 URL이 여러 가지 리소스 중 적합한 것에 대응되도록 함
트랜스코딩 : HTTP 클라이언트와 서버 사이의 내용 협상에 대한 응답에서 수행됨
- 커스터마이징 페이지 생성 → ex) 구형 단말기에 맞도록 HTML에서 WML 페이지로 변환
내용 협상 기법
클라이언트 주도 기법, 서버 주도 기법, 투명 기법
- 서버는 선택지를 주고, 클라이언트가 선택
- 서버가 요청 헤더를 검증해서 어떤 버전을 제공할지 결정
- 투명한 중간 장치(주로 프락시 캐시)가 서버를 대신하여 협상
클라이언트 주도 기법
장점 : 서버 입장에서 가장 구현하기 쉽고, 클라이언트는 최선의 선택 가능
단점
- 각 페이지에 두 번의 요청 필요 → 한번은 가능한 페이지 목록, 두번째는 선택한 사본 얻기
선택지 표현 방법
- 여러 가지 버전에 대한 링크와 각각에 대한 설명이 담긴 HTML 페이지
- 브라우저 사용자에 의해 수동으로 결정됨.
- 300 Multiple Choices 코드로 HTTP/1.1 응답 돌려주기
- 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 요구
서버 주도 협상
- 내용 협상 헤더 → Accept 관련 헤더
- 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
- 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> : 응답 생성에 영향을 줄 수 있는 요청 헤더 이름을 쉼표로 구분
트랜스 코딩
서버가 클라이언트의 요구에 맞는 문서를 아예 갖고 있지 않다면?
- 에러 응답
- 기존 문서 변환 → 트랜스 코딩
포맷 변환
예시
- 고해상도 이미지 → 저해상도 이미지
- 광고가 있는 페이지 → 광고가 없는 페이지
- 컬러 → 흑백
내용 협상 헤더에 의해 주도됨(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 |