[꼼꼼한 개발자] 꼼코더

25. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 헤더1 - 일반 헤더] - 콘텐츠 협상 본문

HTTP

25. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 헤더1 - 일반 헤더] - 콘텐츠 협상

꼼코더 2022. 12. 2. 16:16
반응형

🤝 콘텐츠 협상(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
Comments