HTTP Headers

HTTP 특징

  • Stateless protocol
    • 여러 클라이언트가 서버에게 요청을 할때, 각 개별적인 요청은 서로 연관되어 있지 않다.
    • 그럼 이렇게 상태가 없는 HTTP 프로토콜에서 사용자가 로그인 되었음을 어떻게 알 수 있을까 ? => 보통 세션과 쿠키를 이용함
  • Sessions & Cookies
    1. 클라이언트가 서버에거 로그인 요청을 하면, 서버가 클라이언트에게 성공 응답값(200)과 함께 response를 준다
    2. 서버는 이 response의 헤더에 Set-Cookie 라는 auth 토큰을 보내준다.
    3. 클라이언트의 브라우저는 header에 cookie가 들어있으면 자동으로 로컬 쿠키에 저장해준다. 클라이언트측에서 따로 처리해줘야할 건 없다.
    4. 브라우저가 자동으로 해당 서버에 해당하는 쿠키를 저장하고 있다가, 다음 요청시 header에 똑같은 auth 쿠키를 넣어서 서버에 보냄)
서버 응답 헤더 set-cookie에 auth 토큰을 실어보냄
브라우저가 요청의 header에 auth 토큰을 실어서 요청

이렇게 쿠키와 헤더를 이용하여 각각의 요청이 stateless(상태가 없음)임에도 불구하고, 사용자가 로그인 했다는 정보를 알 수 있다.

  • Cache-control
    • 서버에서 클라이언트에게 데이터를 줄 때 헤더에 ‘cache-control’을 명시하면, 브라우저는 자동으로 저장소에 이 데이터를 저장하고 있다가 클라이언트가 동일한 요청을 하면 서버에 또 다시 요청하는 것이 아니라 저장되어있는 데이터를 그대로 재활용한다.
  • User-Agent
    • 서버에서 요청하는 클라이언트가 누구인지 알고 싶을때 쓰는 것
    • 브라우저와 운영체제에 대한 정보가 들어있음

이렇듯 HTTP 헤더에는 여러가지 약속된(표준화된) 데이터들을 넣을 수 있고, 커스터마이징된 데이터를 넣을 수도 있다.

헤더에 다른 원하는 정보를 추가하고 싶으면 Custom 하게 사용하면 되는데, 여기서도 규칙이 있다. 예전에는 ‘x-auth’ 와 같이 사용했으나, 2012년도부터 이 방법은 더 이상 권고되지 않는다.( x- 로 시작되는 것 중에 표준화가 된 것이 꽤 있기 때문에, 충돌이 날 수 있기 때문)

이제는 domain-key 혹은 domain.key 로 사용하여야 한다.
ex) dylan.com-auth , dylan.com.auth

✏️ 헤더에 인증을 위해 ‘x-auth’ 를 추가하여 사용하는 경우가 많은데, 되도록이면 header에서 표준화가 된 ‘Authorization’ 을 사용하는 것이 좋다.


표준화된 Headers 값

  • User-Agent
    • user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36
  • Authorization
    • 로그인에 관련된 정보를 저장한다면, 아무 커스텀한 필드를 사용하는게 아니라, 표준화된 ‘Authorization’ 으로 데이터를 주고 받는다.
    • Basic YWxhZGRpbjpvcDKDdekdm14
  • Content-Length
    • 컨텐츠가 얼마나 큰지 bytes로 표기
  • Content-Type
    • text/html|application/json
  • Content-Language
    • en
  • Cache-Control
    • 얼마나 오랫동안 이 데이터를 캐시해야하는지
    • Cache-Control: max-age=<seconds>
    • Cache-Control: no-cache

그외 표준화된 HTTP Headers 를 확인하려면 아래 MDN 사이트 참고

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers