HTTP 웹/Http 웹 기본

(14) HTTP - 콘텐츠 네고시에이션

코르시카 2021. 7. 3. 18:36

1. 협상(콘텐츠 네고시에이션)이란?

1-1) 정의

클라이언트가 선호하는 표현 요청을 우선순위로 하여 달라고 함
- 요청시에만 사용(클라이언트가 서버에 전달)
- 서버에서 제공 가능하면 제공해줌

  • Accept : 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset : 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
  • Accept-Language : 클라이언트가 선호하는 자연 언어

 

1-2) Accept-Language 적용 전

(a) 과정

  1. /event 경로로 Host에 접속
  2. 서버는 기본en, 지원ko인 상황인데, Client가 언어 정보를 보내주지 않으므로 기본 en으로 서버가 정보 전송

 

1-3) Accept-Language 적용 후

(a) 과정

  1. 클라이언트가 서버에 요청시 헤더에 Accept-Language 전송
  2. 메세지 body에 한국어로 변경하여 전송

 

1-4) Accept-XX 복잡한 예시

(a) 상황 - 해결 전

> 한국어로 지원하였는데 서버가 독일 / 영어 만 지원하는 경우
   그 다음 선호 언어를 선택할 때 한국어로 전송하여도 영어로 나오게 하고싶은 상황

(b) 협상과 우선순위 1

  • Quality Values(q) 라는 값을 추가하여 적어준 선호도 순으로 작동하게 함
    - 0~1 사이의 값, 클수록 높은 우선순위
    - 생략할 시 기본 값은 1
    - ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,,en;q=0.7
    > 구분자는 ' , ' 콤마를 사용
       - 1. ko-KR;q=1( ∵ 여기서는 생략되었음)    → ko-KR 한국사람들이 쓰는 한국어
       - 2. ko;q=0.9                                       → ko 한국어 안쓰지만 공용 한국어
       - 3. en-US;q=0.8                                  → en-US 미국에서 쓰는 영어
       - 4. en;q=0.7                                       → en 공통 영어
  • 다음과 같이 고쳐짐
  • 브라우저에서 실제 값

 

(c) 협상과 우선순위 2

> language에만 해당하는 것이 아닌 Accpet에 해당(미디어 타입)

  • 구체적으로 적어준 Accept- xxx 가 먼저 우선순위로 적용됨
    - ex) Accept: text/*, text/plain, text/plain;format=flowed, */*
       1. text/plain;format=flowed
       2. text/plain
       3. text/*
       4. */*

 

(d) 협상과 우선순위 3

> language에만 해당하는 것이 아닌 Accpet에 해당(미디어 타입)

  • 구체적 순으로 매칭되는 것으로 미디어 타입을 맞춤
    ( regex 많이 매칭되는 것이 뒤로, 구체적으로 일치하는게 앞으로 )

    - ex) Accept: text/*q=0/3, text/html;1=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5

참조

섹션 : HTTP 헤더1 - 일반 헤더

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

반응형