(인프런) 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 공부하고 리뷰한 글입니다.
3. 콘텐츠 협상
1. 콘텐츠 협상(Contents Negotiation)
클라이언트가 선호하는 표현 요청
- 협상 헤더는 요청시에만 사용
- 클라이언트 별로 선호하는 표현을 서버에서 처리해서 줄 수 있음
1) Accept: 클라이언트가 선호하는 미디어 타입 전달
2) Accept-Charset: 클라이언트가 선호하는 문자 인코딩
3) Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
4) Accept-Language: 클라이언트가 선호하는 자연 언어
2. Accept-Language
1) Accept-Language 적용 전
한국어 브라우저로 외국에 있는 /event 에 접속 요청을 보내면,
서버는 클라이언트가 어떤 언어를 요청하는지 알 수 없기 때문에, 기본 영어(en)로 브라우저에 응답한다.
2) Accept-Language 적용 후
한국어 브라우저로 외국에 있는 /event 에 Accept-Language: ko (한국어 선호) 로 접속 요청을 보내면,
서버는 기본 영어 외에 한국어를 지원하므로 한국어(ko)로 브라우저에 응답한다.
3) Accept-Language 복잡한 예시
한국어 브라우저로 외국에 있는 /event 에 Accpet-Language: ko (한국어 선호) 로 접속 요청을 보내면,
서버가 한국어를 지원하지 않으므로 기본 독일어(de)로 브라우저에 응답한다.
하지만 우리는 독일어보다는 영어가 익숙하다.. 그래서 우선순위가 필요하다!!
3. 협상과 우선순위1
<Quality Values(q)>
- Quality Values(q) 값의 범위: 0~1(생략하면 1)
- 클수록 높은 우선순위
1) Accept-Language 복잡한 예시
한국어 브라우저로 외국에 있는 /event 에 Accept-Language: ko-KR (한국어 우선순위 1), ko;q=0.9,en-US;q=0.8,en;q=0.7 로 접속 요청을 보내면,
서버가 한국어를 지원하지 않으므로 다음 우선순위인 영어(en)로 브라우저에 응답한다.
4. 협상과 우선순위2
<Quality Values(q)>
- 구체적인 것이 우선
- 우선순위: text/plain;format=flowed > text/plain > text/* > */*
5. 협상과 우선순위3
<Quality Values(q)>
- 구체적인 것을 기준으로 미디어 타입을 맞춤
- 클라이언트에서 요청한 text/html;level의 우선순위가 가장 높고 서버가 해당 미디어 타입을 지원하므로 text/html;level 미디어타입으로 응답한다.
7-3. 콘텐츠 협상 질문 정리
Q. 브라우저에서 Accept-Language: ko 로 서버에 요청을 하면, 서버에서 우선순위에 따라 어떠한 언어로 응답을 해야한다. 이러한 로직을 개발자가 작성해야하나요?
대부분의 웹 프레임워크나 웹 기술들이 해당 기능을 우선순위별로 뽑을 수 있게 제공해준다. 자바는 HttpServletRequest 객체의 request.getLocals()를 호출하면 우선순위대로 정렬해서 반환해준다.
[출처] https://www.inflearn.com/questions/112552
Q. Accept-Language에 값을 넣어 클라이언트가 요청을 보내 서버가 우선순위를 고려하여 어떠한 언어로 응답을 보낸다. 이 과정에서 여러 언어로 작성된 HTML을 응답해주는건가요?
HTML 뼈대는 그대로 두고 텍스트에 해당하는 부분만 Accept-Language 에 따라 변경해준다.
스프링의 경우 헤더의 Accept-Language 값을 읽어 사용자에게 적절한 언어로 제공한다.
[출처] https://www.inflearn.com/questions/366906
'Spring > 모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 07. HTTP 헤더1(일반헤더) - 일반 정보, 특별한 정보 (0) | 2022.06.07 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 07. HTTP 헤더1(일반헤더) - 전송 방식 (0) | 2022.06.07 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 07. HTTP 헤더1(일반헤더) - HTTP 헤더 개요, 표현 (0) | 2022.06.07 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 06. HTTP 상태코드 - 4xx(클라이언트 오류), 5xx(서버 오류) (0) | 2022.06.02 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 06. HTTP 상태코드 - 3xx(리다이렉션1), 3xx(리다이렉션2) (0) | 2022.06.02 |