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