HTTP 헤더 (일반 헤더)

형식

  • field-name: OWS(띄어쓰기 허용) field-value OWS(띄어쓰기 허용)
  • field-name 대소문자 구분 X

용도

  • HTTP 전송에 필요한 모든 부가 정보
    • ex) 메세지 바디 내용 & 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등등
  • 표준 헤더가 너무 많음
  • 필요시 임의의 헤더 추가 가능 위키피디아 참고

분류 - RFC2616 (과거)

RFC2616

사진 출처

  • 1999년에 나옴
  • General 헤더 : 메세지 전체에 적용되는 정보
  • Request 헤더 : 요청 정보
  • Response 헤더 : 응답 정보
  • Entity 헤더: Entity Body(본문)의 데이터를 해석할 수 있는 정보 제공 (데이터 유형, 길이, 압축 정보 등)
    • Entity Body : 요청이나 응답에서 전달할 실제 데이터

분류 - RFC7230 ~ 7235 (최신)

RFC7230

  • 2014년에 나옴
  • 엔티티 -> 표현(Representation)으로 바뀜
  • Representation = Representation Metadata + Representation Data
  • 메세지 Body(본문)을 통해 표현 데이터 전달
  • 메세지 본문 = 페이로드(payload)
  • 표현 헤더 : 표현 데이터를 해석할 수 있는 정보 제공 (데이터 유형, 길이, 압축 정보 등)
    • 표현 : 요청이나 응답에서 전달할 실제 데이터

표현 헤더(Representation)

  • 응답, 전송 둘 다에 사용
  • Content-Type
    • 표현 데이터의 형식
    • 미디어 타입, 문자 인코딩
    • ex) text/html; charset=utf-8, application/json, image/png
  • Content-Encoding
    • 표현 데이터의 압축 방식
    • 표현 데이터를 압축하기 위해 사용
    • 데이터를 전달하는 곳에서 압축 후 인코딩 헤더에 추가
    • 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
    • ex) gzip, deflate, identity
  • Content-Language
    • 표현 데이터의 자연 언어
    • ex) ko, en, en-US
  • Content-Length
    • 표현 데이터의 길이
    • 바이트 단위
    • Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안됨

협상 (Contents Negotiation)

  • 클라이언트가 선호하는 표현 요청 (요청 시에만 사용)
  • 협상과 우선 순위
    1. 숫자의 경우 : 0 ~ 1 범위, 클수록 높은 우선 순위를 가짐 (default : 1)
    2. 문자의 경우 : 구체적인 것이 우선 [ ex)text/* < text/plain;format-flowed ]
    3. 구체적인 것을 기준으로 미디어 타입을 맞춤
  • Accept : 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset : 클라이언트가 선호하는 문자 인코딩
  • Accpet-Encoding : 클라이언트가 선호하는 압축 인코딩
  • Accpet-Language : 클라이언트가 선호하는 자연 언어

전송 방식

  • 단순 전송
    • Content-Length
    • 컨텐트의 길이를 알 수 있을 때 사용
  • 압축 전송
    • Content-Encoding
    • 뜻 그대로 압축하여 전송
  • 분할 전송
    • Transfer-Encoding
    • chunked : 데이터를 덩어리로 쪼개서 보냄
    • Content-Length를 넣으면 안됨
  • 범위 전송
    • Range, Content-Range
    • 원하는 범위를 명확히 지정해서 그만큼만 요청

일반 정보

  • 정보의 성질이 헤더
  • From : 유저 에이전트의 이메일 정보
    • 일반적으로 잘 사용되지 않음
    • 검색 엔진 같은 곳에서 사용
    • 요청에서 사용
  • Referer : 이전 웹 페이지 주소
    • 매우 자주 사용된다 (referrer의 오타..)
    • 현재 요청된 페이지의 이전 웹 페이지 주소
    • A -> B로 이동하는 경우, B를 요청할 때 Referer: A를 포함해서 요청
    • Referer를 통하여 유입 경로 분석 가능
    • 요청에서 사용
  • User-Agent : 유저 에이전트 애플리케이션의 정보
    • 클라이언트의 애플리케이션 정보 (웹 브라우저 정보, OS정보 등)
    • 통계 정보
    • 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
    • 요청에서 사용
  • Server
    • 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
    • 응답에서 사용
  • Date
    • 메세지가 발생한 날짜와 시간
    • 응답에서 사용

ORIGIN 서버


클라이언트가 HTTP 요청을 보낼 때, 여러 서버를 거쳐 최종적으로 받아주는, 끝단에 존재하는 서버

특별한 정보

  • 특별한 정보를 제공하는 헤더
  • Host
    • 요청한 호스트 정보 (도메인)
    • 필수
    • 하나의 서버가 여러 도메인을 처리해야할 때
    • 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 (가상 호스트를 사용하여 가능)
    • 요청에서 사용
  • Location
    • 페이지 리다이렉션
    • 201(Created)에서 사용 : 요청에 의해 생성된 리소스 URI
    • 300번대 에서 사용 : 요청을 자동으로 리다이렉션하기 위한 대상 리소스를 가리킴
    • HTTP 상태 코드 300번대 참고
  • Allow
    • 허용 가능한 HTTP 메소드
    • 405(Method Not Allowed)에서 응답에 포함해야함
    • ex) Allow: GET, HEAD, PUT
    • 많이 쓰이지 않음
  • Retry-After
    • 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
    • 503 (Service Unavailable)에서 서비스가 언제까지 불능인지 알려줄 수 있음
    • 날짜, 초단위 표기 가능

인증

  • Authorization
    • 클라이언트 인증 정보를 서버에 전달
    • 들어가야 하는 value값은 인증 메커니즘마다 상이함
  • WWW-Authenticate
    • 리소스 접근시 필요한 인증 방법 정의
    • 401 Unauthorized 응답과 함께 사용

쿠키

  • HTTP의 Stateless로 발생하는 문제를 해결하기 위해 사용

  • 주 사용처 : 사용자 로그인 세션 관리, 광고 정보 트래킹

  • 모든 요청에 쿠키 정보를 자동 포함 (항상 서버에 전송됨)

  • 단점

    1. 네트워크 트래픽 추가적으로 유발
    2. 최소한의 정보만 사용 (세션 id, 인증 토큰) => 보안에 민감한 데이터는 저장 X
  • ex) 서버에 로그인을 할 때, 로그인 정보를 매번 요청에 포함시켜 보내지 않고 쿠키에 저장

    • 서버
      • 로그인 요청이 오면 Set-Cookie 헤더에 정보를 담아 클라이언트에 전달
    • 클라이언트
      • 웹브라우저의 쿠키 저장소 Set-Cookie 정보를 저장
      • 로그인 이후, 서버에 요청을 보낼 때 마다 쿠키 저장소에서 해당 값을 찾음
      • Cookie 헤더에 값을 넣어 서버로 전달
  • Set-Cookie

    • 서버에서 클라이언트로 쿠키 전달 (응답)
    • 쿠키 저장소에 저장
    • 생명 주기 - expires, max-age (0이나 음수 지정하면 쿠키 삭제)
      • 세션 쿠키 - 만료 날짜를 생략 => 브라우저 종료시 까지만 쿠키 유지
      • 영속 쿠키 - 만료 날짜를 입력 => 해당 날짜까지 쿠키 유지
    • 도메인 - domain
      • 명시한 문서 기준 도메인 + 서브 도메인 포함
      • ex) domain=example.org
      • 이 경우 domain=을 생략하면 서브 도메인엔 접근할 수 없음
    • 경로 - path
      • 경로를 포함한 하위 경로 페이지만 쿠키 접근
      • 일반적으로 path=/ (루트)로 지정
    • 보안
      • Secure : https인 경우에만 쿠키 전송
      • HttpOnly : XSS 공격 방지 => javascript에서 접근 불가
      • SameStie : XSRF 공격 방지 => 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송
  • Cookie

    • 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달



인프런 - 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 정리한 내용입니다.


김영한님 인프런 강의

댓글남기기