[네트워크 심화] HTTP | 특징, HTTP 헤더

Eunji Lee·2023년 1월 7일
post-thumbnail

HTTP의 특징

1. 클라이언트 서버 구조

클라이언트는 서버에 요청(Request)을 보내고 응답을 대기
서버는 요청에 대한 결과를 만들어 응답(Response)

2. 무상태 프로토콜(Stateless)

서버가 클라이언트의 상태를 보존하지 않음

  • 장점: 서버 확장성 높음 (스케일 아웃)
  • 단점: 클라이언트가 추가 데이터 전송
  • 한계: 로그인이 필요없는 단순한 서비스 소개 화면과 같은 경우는 무상태로 설계할 수 있으나, 로그인이 필요한 서비스는 유저의 상태를 유지해야하기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 함
    • 단, 상태 유지는 최소한만 사용해야 함

Stateful & Stateless

  • 상태 유지(Stateful): 항상 같은 서버가 유지되어야 함
    • 중간에 다른 서버로 작업하게 된다면 상태 정보를 미리 알려줘야 함
  • 무상태(Stateless): 서버가 상태를 저장해두지 않음 + 클라이언트가 상태를 기억해놨다가 마지막에 한꺼번에 요청
    • 아무 서버나 호출해도 요청한 응답을 받을 수 있음
    • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있음
    • 응답 서버를 쉽게 바꿀 수 있으므로 무한한 서버 증설 가능

3. 비연결성(Connectionless)

  • Connectionless: 연결을 유지하지 않는 모델

    • 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊음 → 최소한의 자원 사용

    • 트래픽이 많지 않고, 빠른 응답을 제공할 수 있을 때 효율적으로 작동
      ex. HTTP(1.0)

    • 한계: 트래픽이 많고, 큰 규모의 서비스를 운영할 경우

      • TCP/IP 연결을 새로 맺어야 함 → 3 way handshake 시간 추가
      • 웹 브라우저로 사이트를 요청할 때마다 수많은 자원(HTML, JS, CSS)을 다운받아야 함
    • 한계 보완

      • HTTP/2, HTTP/3에서 최적화 됨
      • HTTP 지속 연결(Persistent Connenctions): 연결이 이뤄지고 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결 종료

cf. Connection Oriented

  • 연결을 유지하는 모델
  • 클라이언트가 요청을 보내지 않아도 서버가 연결을 계속 유지해야 함
    → 서버 자원이 소모됨
    ex. TCP/IP



HTTP Headers

HTTP 메세지의 구조

헤더

  • 형식
    • <field-name> : <field-value>
    • field-name은 대소문자 구분 없음
  • 용도
    • HTTP 전송에 필요한 모든 부가정보(메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등등)

바디

데이터 메시지 본문(Message body)을 통해 표현(Representation) 데이터 전달

  • 페이로드(payload): 데이터를 실어 나르는 부분
  • 표현: 요청이나 응답에서 전달할 실제 데이터

표현 헤더(Representation Headers)

  • 표현 데이터를 해석할 수 있는 정보 제공
    ex. 데이터의 유형(html, json), 데이터의 길이, 압축 정보 등

  • 요청, 응답 두 경우 모두 사용

  • 종류

    헤더의미용도예시
    Content-Type표현 데이터의 형식미디어 타입, 문자 인코딩Text/html charset=utf-8 application/json Image/png
    Content-Encoding표현 데이터의 압축 방식- 표현 데이터를 압축하기 위해 사용
    - 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
    - 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
    gzip
    deflate
    identity
    Content-Language표현 데이터의 자연 언어표현 데이터의 자연 언어 표현ko
    en
    en-US
    Content-Length표현 데이터의 길이- 바이트 단위
    - Transfer-Encoding(전송 코딩)을 사용하면 사용할 수 없음

콘텐츠 협상

  • 클라이언트가 선호하는 표현 요청

  • 협상 헤더는 요청(Request)시에만 사용

  • 종류

    헤더의미
    Accept클라이언트가 선호하는 미디어 타입 전달
    Accept-Charset클라이언트가 선호하는 문자 인코딩
    Accept-Encoding클라이언트가 선호하는 압축 인코딩
    Accept-Language클라이언트가 선호하는 자연 언어
  • 우선순위: Quality Values(q)

    • 0~1, 클수록 높은 우선 순위
    • 생략하는 경우, 1

0개의 댓글