Skip to main content Link Search Menu Expand Document (external link) Copy Copied

헤더의 용도는?

헤더는 정보를 분류하고 정리한다. 그 종류는 다양하다. 표준 헤더는 많다.

  • 일반 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close
  • 요청 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh; ..)
  • 응답 헤더: 응답 정보, 예) Server: Apache
  • 엔티티 헤더: 엔티티 바디 정보, 예) Content-Type: text/html, Content-Length: 3423

HTTP에서 엔티티? 표현?

과거에는 엔티티 헤더와 본문이라고 불렀다. 본문에서는 데이터를 해석할 수 있는 정보를 제공했다. 현재는 엔티티를 표현이라는 용어로 대체했다. 메타 데이터와 메인 데이터를 합친 의미로 사용된다. 메타 데이터로는 Content-Type, Content-Encoding, Content-Language, Content-Length 등이 있다.


협상(콘텐츠 네고시에이션)

클라이언트가 선호하는 표현을 요청한다.

  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어

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


값의 우선순위를 다루는 법?

협상과 우선순위(Quality Values)를 알아야한다. 0~1의 범위에서 클수록 높은 우선순위를 가진다. 1은 생략할 수 있다.

예) 다국어 지원에서 한국어, 영어 순으로 제공하려면 이와같다.
Accecpt-Langueage: ko-KR;ko;q=0.9,en-US;q=0.8

구체적인 것이 우선순위가 높다.


전송방식의 종류는?

  • 단순 전송
  • 압축 전송
    압축되어 전송되는 경우 Content-Encoding을 같이 제공해야 클라이언트가 풀어쓸 수 있다.
  • 분할 전송
    분할하여 전송되는 경우 Content-Langth를 예측할 수 없기 때문에 포함하지 않는다.
  • 범위 전송

정보성을 가진 헤더?

  • From: 유저 에이전트의 이메일 정보(요청, 잘 사용되지 않음)
  • Referer: 현재 요청된 페이지의 이전 웹 페이지 주소(요청, 유입 경로 분석)
  • User-Agent: 클라이언트의 애플리케이션 정보(요청, 통계 정보)
  • Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보(응답)
  • Date: 메시지가 발생한 날짜와 시간(응답)

특별한 종류의 헤더?

  • Host: 요청한 도메인을 보낸다. 하나의 서버가 여러 도메인을 처리해야 할 때 필수이다.(요청)
  • Location: 201이나 3xx(리다이렉션)에 사용된다.
  • Allow: 405에서 응답에 포함해야 함. 지원하는 HTTP 메소드를 나열해준다.
  • Retry-After: 서비스가 언제까지 불능인지 알려준다.(날짜 혹은 초단위 표기)

인증에 관한 헤더?

  • Authorization: 클라이언트 인증 정보를 서버에게 전달한다.
  • WWW-Authenticate: 401 Unauthorized 응답과 함께 사용한다. 인증 방법을 정의한다.

쿠키를 사용하는 법?

  • Set-Cookie: 서버에서 클라이언트로 쿠키 전달한다. (응답)
  • Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고 HTTP 요청 시 서버에 전달한다.

쿠키에 대해서?

무상태(Stateless) 프로토콜이기 때문에 쿠키를 사용해야 하는 순간이 온다. 주로 사용자 로그인 세션 관리, 광고 정보 트래킹 등을 위해 사용한다. 매번 전송에 포함되지 때문에 네트워크 트래픽 추가 유발되며, 보안을 위해 최소한의 정보만 사용(세션, id, 인증 토큰) 해야 한다. 만약 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지를 참고한다. 보안에 민감한 데이터는 절대 포함되면 안 된다.


쿠키의 생명주기는?

  • Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
    • 만료일이 되면 쿠키 삭제
  • Set-Cookie: max-age=3600 (3600초)
    • 0이나 음수를 지정하면 쿠키 삭제
  • 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
  • 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지

쿠키의 특징

  • domain 옵션을 생략하지 않고 명시적으로 지정해서 쿠키를 생성하게 되면 서브 도메인에서도 접근이 가능하다. path 옵션을 사용하면 해당 경로를 포함한 하위 경로만 접근이 가능하게 할 수도 있다.
  • https에서만 전송 가능하게 하는 Secure이나 js에서 접근이 불가하게 하는 HttpOnly, 요청 도메인과 쿠키에 있는 도메인이 같은 경우에만 전송이 가능한 SameSite 등 보안에 대한 요소도 있다.