네트워크 스터디 7주차-1

msgo·2025년 11월 12일

HTTP 헤더와 기반 기술

HTTP 메시지의 필드 라인에는 다양한 헤더가 명시된다.
헤더는 요청과 응답의 부가 정보를 전달하며, 통신 동작의 세부 동작 방식을 제어한다.


요청 헤더

  • Host
    요청을 보낼 서버의 호스트 이름과 포트를 명시.
    예:

    Host: www.example.com
  • User-Agent
    클라이언트 프로그램(브라우저, API 클라이언트 등)의 정보를 포함.
    서버는 이를 이용해 클라이언트 환경에 맞는 응답을 반환.

  • Referer
    요청을 보낼 때 사용자가 머물던 이전 페이지의 URL.
    웹 트래픽 분석이나 보안 정책에 사용.

  • Authorization
    인증 정보를 담는 헤더.
    인증 방식(Type)과 자격 증명(Credentials)으로 구성.

    Authorization: Basic <credentials>
    • Basic:
      사용자명과 비밀번호를 username:password 형태로 Base64 인코딩.
      단순하지만 암호화되지 않아 HTTPS 사용이 사실상 필수.
    • Bearer (JWT):
      JSON Web Token 기반의 인증.
      클라이언트는 서버로부터 받은 JWT를 Authorization 헤더에 담아 요청.
      JWT.io에서 JWT 구조 확인 가능.
      헤더(Header), 페이로드(Payload), 서명(Signature) 세 부분으로 구성.

응답 헤더

  • Server
    요청을 처리한 서버 소프트웨어 정보 명시.

  • Allow
    해당 리소스에서 허용된 HTTP 메서드 목록을 전달.

    Allow: GET, POST
  • Retry-After
    재요청 가능 시점 명시. 503(Service Unavailable) 응답과 함께 사용.

  • Location
    리소스의 새로운 URL 경로 제공. 3xx 리다이렉션 응답 시 사용.

  • WWW-Authenticate
    클라이언트에게 인증 방식을 제시.
    예:

    WWW-Authenticate: Basic realm="Access to the site"

공통 헤더

요청과 응답 모두에 사용 가능한 일반 헤더.

  • Date
    메시지가 생성된 시각.
  • Connection
    연결 유지(keep-alive) 여부 제어.
  • Content-Length
    메시지 본문의 길이(Byte).
  • Content-Type
    전송되는 데이터의 미디어 타입.
  • Content-Language
    본문의 언어 정보.
  • Content-Encoding
    데이터 압축 형식. 예: gzip, br

캐시(Cache)

캐시는 자원의 사본을 임시로 저장하여, 동일 요청 시 대역폭 낭비를 줄이고 응답 속도를 향상시키는 기술.

  • 사본 저장: 원본 자원이 아닌 복제본 저장.

  • 위치에 따른 구분

    • Private Cache: 클라이언트(브라우저) 로컬 저장.
    • Shared Cache: 프록시, CDN 등 중간 서버에 저장.
  • 신선도(Freshness)
    캐시된 데이터가 원본과 얼마나 일치하는지를 나타냄.

    • 유효기간 설정 (Expires, Cache-Control: max-age)

    • 재검증 (Validation)

      • If-Modified-Since: 변경일 기준 검증.

      • ETag (Entity Tag): 버전 태그를 이용한 검증.

        ETag: "v1.0"
        If-None-Match: "v1.0"
    • 서버 응답 코드

      • 200: 자원 변경됨 → 새 데이터 전송
      • 304: 변경 없음 → 캐시 데이터 사용
      • 404: 자원 삭제됨

    참고: MDN Cache-Control


쿠키(Cookie)

HTTP는 상태를 유지하지 않는 프로토콜이므로, 로그인 상태 유지나 세션 관리에는 쿠키가 사용된다.

  • 쿠키의 생성: 서버가 Set-Cookie 헤더로 클라이언트에 쿠키 전달.

  • 쿠키의 사용: 클라이언트는 이후 동일 도메인 요청 시 Cookie 헤더에 쿠키 포함.

    Cookie: sessionId=abc123
  • 구성 요소

    • Domain: 적용 도메인
    • Path: 적용 경로
    • Expires / Max-Age: 유효 기간
    • Secure: HTTPS에서만 전송
    • HttpOnly: 자바스크립트 접근 제한

보안상 민감한 정보는 JWT 또는 세션 토큰을 통한 관리가 선호된다.

참고: RFC 6265 - HTTP State Management Mechanism


콘텐츠 협상 (Content Negotiation)

서버가 하나의 URI에 대해 클라이언트의 요청 특성에 맞는 최적의 자원 표현을 제공하는 메커니즘.

  • Accept: 클라이언트가 받을 수 있는 MIME 타입 지정.

    Accept: application/json
  • Accept-Language: 언어 선호도 지정.

    Accept-Language: ko-KR, en-US;q=0.8
  • Accept-Encoding: 인코딩 타입 지정.

    Accept-Encoding: gzip, deflate

서버는 요청 헤더를 참고하여 가장 적합한 자원 표현(Representation)을 선택해 응답.
한국어 브라우저 요청 시 한국어 페이지, 영어 브라우저 요청 시 영어 페이지가 반환되는 이유.

참고: MDN HTTP Content Negotiation


질문: 동일 요청에 대해 저장소에서 결과를 꺼내주는 것은 캐시인가?

부분적으로 그렇다.
다만 맥락에 따라 다르다.

  • HTTP 캐시:
    응답 자체를 캐싱하여 동일 요청 시 네트워크 요청 없이 반환.
    이는 프로토콜 차원의 캐시.

  • 애플리케이션 캐시(서버 로직):
    API 내부에서 DB나 연산 결과를 저장소(Redis 등)에 저장하고, 동일 요청 시 이를 반환하는 구조는 서버 측 캐시(Server-side Cache)에 해당.
    HTTP 캐시와 목적은 같지만, 관리 주체가 애플리케이션 로직이다.

참고: Google Developers - Caching Best Practices


0개의 댓글