HTTP 통신을 이해해보자 -7

박가현·2023년 6월 5일
1

HTTP

목록 보기
7/8
post-thumbnail

HTTP 일반헤더



HTTP 헤더는 왜 존재할까?

HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 전송한다 예를 들어 메시지 바디 내용, 메시지 바디 크기, 서버 정보 , 등등 ..


표현 헤더

  • 표현 데이터란 ?

표현은 요청이나 응답에서 전달할 실제 데이터고 이런 표현 데이터는 메시지 본문을 통해 전달한다. 이 표현 데이터를 해석할 수 있는 정보를 제공하는 헤더를 **표현헤더**라고 한다

표현 데이터를 해석할 수 있는 정보? → 데이터 유형, 데이터 길이, 압축 정보 같은 정보를 제공한다고 생각하면 된다

표현 헤더 종류는 아래와 같다

content type

컨텐츠 바디에 들어가는 내용이 무엇인지를 나타내는 형식이다

예를 들어 html 내용이 들어가면 content type은 html이다

content encoding

표현 데이터 압축 방식을 의미한다 만약 클라이언트에게 표현 데이터를 압축해서 보내면 클라이언트는 이게 무엇으로 압축되었는지 알아야 하므로 content encoding의 값을 보고 알 수 있다

content language

표현 데이터의 언어를 의미한다

✅content length

표현 데이터의 길이인데 바이트 단위로 나타낸다


협상헤더

협상 헤더는 클라이언트가 원하는 표현으로 전송해달라고 서버에게 요청하는 헤더이다 그러면 협상헤더를 보고 서버는 가능한 클라이언트가 원하는 표현으로 전송한다

협상헤더는 요청시에만 사용한다

✅Accept

클라이언트가 선호하는 미디어 타입 전달

✅Accept-Charset

클라이언트가 선호하는 문자 인코딩

✅Accept-Encoding

클라이언트가 선호하는 압축 인코딩

✅Accept-Language

클라이언트가 선호하는 자연 언어

ex) 한국 브라우저에서 외국에 있는 사이트에 접속했다고 가정해보자 이 사이트는 다중 언어를 지원하는 서버이기에 요청이 왔을 때는 기본 값인 영어를 보낸다

그런데 만약 accept language를 사용해서 ko 언어로 보내달라고 하면 서버는 content language ko로 보낸다

quality values(q)

하지만 만약 기본 값이 불어인 사이트에서 한국어 언어로 데이터를 요청했다고 가정해보자 이때 한국어가 존재하지 않는다면 기본 값인 불어를 content language로 설정하여 데이터를 보낼 것이다. 하지만 우리는 기본 값인 불어보다는 차라리 영어 데이터가 더 낫다고 전달해야한다. 이런 상황을 위해 사용하는 것이 우선순위로 accept language에 단순히 ko가 아닌 우선순위를 사용하여 요청을 보낸다

Accept도 마찬가지로 우선순위를 정해줄 수 있다


전송 방식

  • 단순 전송
    • 우리가 흔히 사용하는 한번에 요청을 하고 한번에 응답을 받는 방식을 의미한다
  • 압축 전송
    • 말 그대로 압축해서 전송하는 방식이고 이때는 content encoding을 사용한다
  • 분할전송
    • 데이터를 분할해서 전송하는 것이고 이때는 content length가 예상이 안되기에 content length 헤더를 사용하지 않아야한다
    • 이는 이미지 같은 큰 데이터를 보낼 때 전체 사이즈를 계산하지 않아도 되기에 유용하게 사용한다
  • 범위 전송
    - 전체 본문 메시지에서 부분 메시지가 속한 위치를 나타낸다
    - 분할 전송을 기본적으로 범위 전송이라고 생각하면 된다 분할 전송중 어떤 전송이 제대로 처리되지 않으면 해당 범위만큼 범위 전송을 다시 한다


일반 정보

✅referer

현재 요청된 페이지의 이전 웹 페이지 주소

ex) 구글에 gpt를 검색해서 gpt 사이트를 들어갔다면 이때 요청의 referer은 구글 검색 페이지가 될 것 이다

이는 referer을 통해 유입 경로를 분석할 수 있다

✅user agent

요청을 보낼 때 내 웹 브라우저 정보를 user agent 헤더를 통해 보낸다

이 헤더는 어떤 종류의 브라우저에서 장애가 발생하는 지 파악이 가능하다

✅server

요청을 처리하는 origin 서버의 소프트웨어 정보를 나타낸다

우리가 요청을 보내면 중간에 여러 proxy 서버를 거치게 된다 이때 진짜 서버를 origin이라고 한다

✅date

메시지가 발생한 날짜와 시간


특별한 정보

✅Host

요청한 호스트 정보로 요청에서 사용한다 필수헤더이다

하나의 IP 주소에 여러 도메인이 적용되어 있을 때 사용한다

예를 들어 하나의 서버(같은 ip주소)에 aaa.com , bbb.com , ccc.com 세개 도메인을 사용하고 있다고 가정해보자 이때 만약 / 로 요청을 보낼때 어떤 도메인에 보내야할지 모르는 상황이 생긴다 그럴 때 Host 헤더를 써서 구분한다

✅ Location

응답 코드가 3XX이고 Location 헤더가 존재하면 Location 위치로 이동한다

응답 코드가 2XX 일땐 요청에 의해 생성된 리소스 URI를 나타낸다

✅Allow

허용 가능한 http 메서드를 나타내는 헤더이다

예를 들어 해당 url 경로에서 get head put 메서드만 지원을 한ㄷ고 가정 post 메서들르 사용하면 405 에러를 보내고 allow 안에 허용 가능한 http 메서드를 보낸다

✅Retry after

503 응답 코드를 보낼 때 사용하는 헤더이다

언제까지 서비스 이용 불가인지를 나타낸다


인증

  • Authorization 헤더
    • 사용자를 인증하는 자격 증명을 제공하는 데 사용할 수 있다 ( 보통 토큰을 담음)
    • Authorization :
  • WWW-Authenticate
    • 리소스 접근 시 필요한 인증 방법을 정의
    • 401 응답과 함께 사용

→ 쿠키에 관한 내용은 해당 글에 포함하면 길어질 것 같아 다른 아티클로 분리했다

https://youthful-jump-c97.notion.site/600984e004c74c11ab98ce30ed79b0bb

profile
프론트엔드 공부일지

0개의 댓글