✏️ HTTP Header의 협상과 전송 방식

박상민·2023년 9월 2일
0

HTTP WEB 기본 지식

목록 보기
8/13
post-thumbnail

⭐️ 협상(Content-Negotiation)

Content-Negotiation?
클라이언트와 서버가 있다고 하자. 클라이언트가 원하는 표현으로 달라고 서버한테 요청을 한다. 그렇다면 서버는 클라이언트가 원하는 우선순위에 맞춰서 표현 데이터를 만들어 준다.

클라이언트가 선호하는 표현 요청

  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어
  • 협상 헤더는 요청시에만 사용

📌 Accept-Language 적용 전

예를 들어서 내가 한국어 브라우저를 사용한다고 하자. 그리고 외국에 있는 /event라는 사이트에 접속한다. 이 사이트는 다중 언어를 지원하는 서버인데 우선순위가 기본으로는 영어를 지원하고 한국어 또한 지원한다.
그런데 클라이언트가 보낸 요청 메시지에는 클라이언트가 원하는 언어가 한국어인지 나타나 있지가 않다. 그렇기 때문에 서버는 클라이언트에게 기본 언어인 영어로 지원한다.

📌 Accept-Language 적용 후

클라이언트에서 서버에 요청을 할 때 Accept-Language: ko를 요청 메시지에 포함한다. 서버는 한국어를 지원하고 클라이언트가 한국어를 원한다는 것을 알기 때문에 기본 언어는 영어이지만 콘텐츠 네고시에이션에 따라서 서버는 클라이언트에게 한국어로 지원한다.

✔︎ 복잡한 예시


그렇다면 클라이언트가 한국어를 요청했지만 서버의 기본 언어가 독일어이고, 한국어를 지원하지 않는다면?
대부분의 경우 독일어보다는 영어가 익숙하기 때문에 그나마 익숙한 영어로 지원해주기를 바랄 것이다. 이런 경우 때문에 우선순위가 필요한 것이다.

📌 협상과 우선순위1


Quality Values(q) 값 사용

  • 0~1, 클수록 높은 우선순위
  • 생략하면 1
  • Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
      1. ko-KR;q=1 (q생략)
      1. ko;q=0.9
      1. en-US;q=0.8
      1. en;q=0.7

        Google에 hello를 검색한 결과

📌 협상과 우선순위2

📌 협상과 우선순위3

표의 text/plain은 Accept에서 정확히 매칭되는 것이 없기 때문에 text/*에 속한다. 따라서 Quality가 0.3이다.

⭐️ 전송 방식

  • 단순 전송
  • 압축 전송
  • 분할 전송
  • 범위 전송

📌 단순 전송 - Content-Length

클라이언트가 서버에 요청을 하면 서버는 요청에 따라서 응답을 주는데 Content-Length를 포함해서 응답 데이터의 길이를 알 수 있게 해준다.

📌 압축 전송 - Content-Encoding


서버에서 응답을 보낼 때 메시지 바디 부분을 압축해서 보내준다. 이때 Content-Encoding이라는 것이 있어야 한다.

📌 분할 전송 - Transfer-Encoding

Transfer-Encoding: chunked는 데이터를 쪼개서 보낸다는 뜻이다. 즉, 데이터를 분할해서 전송하는 것이다.

📌 범위 전송 - Range, Content-Range

Content-Range를 이용해서 데이터의 범위를 지정해서 요청이 가능하다.


출처
모든 개발자를 위한 HTTP 웹 기본 강의
해당 게시물의 사진 자료는 위 강의의 자료를 사용하였습니다.

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글