Skip to content

Latest commit

 

History

History
139 lines (104 loc) · 5.51 KB

3. HTTP.md

File metadata and controls

139 lines (104 loc) · 5.51 KB

3. HTTP

3.1 모든 것이 HTTP

HTTP (HyperText Transfer Protocol)

인터넷으로 서버클라이언트데이터를 주고 받을 수 있는 프로토콜

  • 거의 모든 형태의 데이터를 전송할 수 있음 (HTML, text, 이미지, 음성, JSON, XML 등등)
  • 역사
    • HTTP/0.9, HTTP/1.0
      • GET 메서드만 지원
      • HTTP 헤더 x
    • HTTP/1.1
      • TCP 프로토콜 기반
      • 가장 중요. 이것만 잘 알아도 됨
    • HTTP/2
      • TCP 프로토콜 기반
      • 성능 개선
    • HTTP/3
      • TCP 대신 UDP 사용
      • 성능 개선
  • 클라이언트/서버 구조를 가짐
  • Stateless & 비연결성
  • 단순하고 확장이 쉬움

3.2 Stateful, Stateless

1. stateful (상태 유지)

  • 서버가 클라이언트의 상태를 보존
  • 항상 같은 서버가 유지되어야 함
  • 클라이언트의 상태를 보존하던 서버에 장애가 발생하면 응답이 불가능 image image

2. stateless (무상태)

  • 서버가 클라이언트의 상태를 보존하지 않음
  • 아무 서버나 호출해도 됨
  • 스케일 아웃 (수평 확장) 유리
    • 클라이언트의 요청이 증가하면 서버만 추가하면 됨

    • 서버가 클라이언트의 상태를 보존하지 않으므로 어떤 서버든 클라이언트의 요청에 응답할 수 있음

      ⇒ 무한 서버 증설 가능

image image

  • 모든 것을 stateless로 설계하기는 어려움

    • 로그인같이 상태를 유지해야 하는 경우 stateful 사용 (쿠키, 세션)
    • stateless는 클라이언트가 데이터를 많이 보내야 한다는 단점이 있음
  • stateful을 최소로 하는 설계를 해야함

    최대한 stateless하게 설계해야 함

3.3 비연결성(Connectionless)

1. 서버가 클라이언트와 계속 연결되어 있다면?

  • 여러 대의 클라이언트와 연결하는 서버라면 연결을 유지하는데 많은 자원을 소비하게됨

2. HTTP비연결성 모델

  • 서버의 응답이 끝나면 연결을 끊어 최소한의 자원으로 서버를 유지할 수 있음
  • 여러 클라이언트가 서비스를 사용해도 동시에 처리를 요구하는 클라이언트는 많지 않음
    • 효율적으로 서비스 운영이 가능

3. 비연결성의 한계

  • 클라이언트가 많은 자원(HTML, 이미지, css...)을 요청하는 경우 하나의 자원을 보낼때 마다 연결을 새로 맺어야 함. (3 way handshake)
    • HTTP 지속 연결(Persistent Connections)로 문제 해결
    • HTTP/2,3에서 더 많이 최적화됨 image image

3.4 HTTP 메시지

  • HTTP 메시지 구조 image image

1. start-line

  1. 요청 메시지 → request-line image

    method (sp) request-target (sp) HTTP-version (crlf)

    • method → HTTP 메소드 (다음장에서 자세히)
    • request target → 절대경로[?쿼리 파라미터]
      • 절대 경로 : ‘/’로 시작하는 경로
  2. 응답 메시지 → status-line image

    HTTP-version (sp) status-code (sp) reason-phrase (crlf)

    • status-code
      • 200 : 성공
      • 400 : 클라이언트 요청 오류
      • 500 : 서버 내부 오류
    • reason phrase → 사람이 이해할 수 있는 짧은 상태 코드 설명

2. header

HTTP 전송에 필요한 모든 부가 정보

  • 표준 헤더가 매우 많음 → 뒤에서 자세히
  • 임의의 헤더 추가 가능 image 요청 메시지

image 응답 메시지

3. empty line (CRLF)

  • new line
  • CRLF
    • CR (Carriage Return)
      • 현재 줄에서 커서를 맨 앞으로 옮기는 동작
      • \r
    • LF (Line Feed)
      • 커서의 위치는 그대로 두고 한 라인을 위로 올리는 동작
      • \n

4. message body

image

  • 실제 전송할 데이터
  • byte로 표현할 수 있는 모든 데이터 전송 가능
  • 클라이언트의 요청 메시지도 바디를 가질 수 있음 (ex. 신규 정보 등록)
⭐ 지금은 HTTP 시대 - HTTP는 단순하여 배우기 쉽고 확장하기 쉬움