웹 공부하기/HTTP

[인프런] 모든 개발자를 위한 HTTP 웹 기본 지식 (HTTP 헤더 - 정보, 인증, 쿠키)

inthess 2021. 9. 28. 08:07
HTTP 헤더 중 정보, 인증, 쿠키에 대해 알아보자.

일반 정보

  • from: 유저 에이전트의 이메일 정보를 담음
    • 요청에서 사용
    • 일반적으로 잘 사용되지 않지만, 검색 엔진 같은 곳에서 사용됨
  • referer: 현재 요청된 페이지의 이전 웹 페이지 주소를 담음
    • 요청에서 사용
    • 이를 통해 유입 경로를 분석할 수 있음
  • user-agent: 클라이언트의 애플리케이션 정보 (웹 브라우저 정보 등)를 담음
    • 요청에서 사용
    • 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
  • server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보를 담음
    • 응답에서 사용
    • ORIGIN 서버: 요청이 서버로 전달될 때 까지 여러 프록시 서버를 거쳐가는데, 그 중 맨 마지막 서버 = 클라이언트가 요청한 데이터를 제공하는 서버
  • date: 메세지가 발생한 날짜와 시간을 담음
    • 응답에서 사용

특별한 정보

  • Host: 요청한 호스트 정보(도메인)를 담음
    • 요청에서 사용
    • 하나의 서버가 여러 도메인을 처리해야 할 때나 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 Host 정보를 전달해주지 않으면 문제가 발생하기 때문에 필수로 작성해야함
  • Location: 리다이렉션될 페이지 URL를 담음
    • 응답에서 사용
    • 201 코드에서 사용되는 Location 값은 요청에 의해 생성된 리소스 URL
    • 3xx 코드에서 사용되는 Location 값은 요청을 자동으로 리다이렉션 하기 위한 대상 리소스 URL
  • Allow: 허용 가능한 HTTP 메서드를 알려줌
    • 405 Method Not Allowed 응답에서 사용
  • Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간을 나타냄
    • 503 Service Unavailable 응답에서 사용
    • 서비스가 언제까지 불능인지 알려주며 이 시간을 날짜로 표기할 수도, 초단위로 표기할 수도 있음

인증

  • Authorization: 클라이언트 인증 정보를 인증 메커니즘에 맞게 전달함
    • 요청에서 사용
  • WWW-Authenticate: 리소스 접근 시 필요한 인증 방법을 정의해 전달함
    • 401 Unauthorized 응답에서 사용

쿠키

쿠키를 사용하지 않을 때의 상황을 보자.

클라이언트가 /welcome 페이지에 접근해서 서버는 '안녕하세요. 손님' 이라는 텍스트를 전달해주었다. '홍길동' 유저가 로그인을 하고 나서, /welcome 페이지에 접근했을 때 '안녕하세요. 홍길동님' 이라고 나타나길 원하는데, '안녕하세요. 손님' 이라고 나타나게 된다.. 왜냐하면 HTTP는 무상태 프로토콜을 하기 때문에, 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어져서 서버는 이전 요청을 기억하지 못한다.

그러면 모든 요청 URL에 사용자 정보를 포함해서 전달해주면 되지 않는가? 가능은 하지만, 모든 요청에 사용자 정보가 포함되도록 일일이 개발해야하고, 브라우저를 완전히 종료하고 다시여는 상황에는 또 문제가 발생한다.

이와 같은 이유로, 우리는 쿠키를 사용한다.

로그인을 할 때, 클라이언트가 정보를 넘겨주면 서버에서 Set-Cookie 헤더로 쿠키를 만든다. 이 쿠키는 쿠키 저장소에 보관해두고, 클라이언트는 Cookie 헤더를 통해 서버에 요청한다.

쿠키는 보통 사용자 로그인 세션 관리, 광고 정보 트래킹 등에 사용되며, 쿠키 정보는 항상 서버에 전송된다. 이 때, 네트워크 트래픽이 추가 유발될 수 있기 때문에 최소한의 정보만 사용하는 것이 좋다. 또는 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하는 웹 스토리지(localStorage, sessionStorage)도 있다. 그리고 주민번호, 신용카드 번호 등 보안에 민감한 데이터는 쿠키에 저장하면 안된다.

 

쿠키 - 생명주기

  • expires
    • GMT 기준으로 날짜, 시간을 입력함
    • 만료일이 되면 쿠키를 삭제함
  • max-age
    • 초단위로 작성하며, 0이나 음수를 지정할 경우에는 쿠키가 삭제됨

쿠키 - 도메인

  • domain
    • 도메인을 지정하는 경우에는 명시한 도메인과 서브 도메인에서 쿠키를 접근할 수 있음
    • 도메인 지정을 생략하는 경우에는 현재 문서 기준 도메인만 쿠키에 접근할 수 있음

쿠키 - 경로

  • path
    • 해당 경로를 포함한 하위 경로 페이지만 쿠키 접근 가능
    • 일반적으로 path=/ (루트)로 지정

쿠키 - 보안

  • Secure
    • 원래 쿠키는 http, https를 구분하지 않고 전송하는데, 이를 적용하면 https인 경우에만 전송함
  • HttpOnly
    • XSS 공격 방지
    • 자바스크립트에서 접근 불가하고, HTTP 전송에만 사용함
  • SameSite
    • XSRF 공격 방지
    • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키를 전송함

출처: [인프런] 모든 개발자를 위한 HTTP 웹 기본 지식