3. HTTP 기본

KOO HEESEUNG·2021년 9월 27일
post-thumbnail

이 포스팅은 인프런 김영한 강사님의 <모든 개발자를 위한 HTTP 웹 기본 지식>을 수강하고, 공부하여 글로 정리한 것입니다. 그대로 갖다 붙여넣는 내용이 아니라 기억나는대로 작성한 후 다시 추가적으로 정리하는 방식을 취하고 있기 때문에 틀린 부분이 있을 수 있습니다. 잘못된 점은 짚어주시면 감사하겠습니다.

1. HTTP

HyperText Transfer Protocol

HTML을 전달하는 프로토콜로 시작되었으나, 현재는 모든 데이터를 전송하는 것으로 발전.

버전은 HTTP/3까지 나왔으나, 현재 가장 많이 사용되는 버전은 HTTP/1.1

HTTP/1.1과 HTTP/2는 TCP 기반으로 동작하고, HTTP/3는 UDP 기반으로 개발됨.


2. HTTP의 특징

1. 클라이언트 서버 구조

  • Request Response 구조
  • 클라이언트가 요청을 보내면 서버에서 응답
  • 클라이언트와 서버를 분리하여 각각 개별적으로 발전 가능

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

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

  • 상태유지(stateful)는 중간에 서버가 변경되지 않아야 함.

  • 무상태는 중간에 서버 변동이 가능. => 응답 서버를 쉽게 바꿀 수 있어 무한한 서버 증설이 가능함.

  • 한계 : 모든 것을 무상태로 설계할 수 있는 것은 아님(ex> 로그인). 데이터를 비교적 많이 보내게 됨.

3. 비연결성

  • 서버가 클라이언트와의 연결을 유지하지 않아 서버 자원을 효율적으로 사용 가능함.

  • 한계 : TCP/IP 연결을 새로 맺어야 함.(3 way handshake 시간 소요) 웹 브라우저로 사이트 요청 시 수많은 자원(JS, CSS, 이미지 등)이 함께 다운로드 됨. 현재는 HTTP 지속 연결로 문제 해결.

    HTTP 초기HTTP 지속 연결

4. HTTP 메시지를 통해 통신

HTTP 메시지 구조

  • 시작 라인 : 요청 메시지(request-line) / 응답 메시지(status-line)
    • request-line : method SP(공백) request-target SP HTTP-version CRLF
      (ex> GET /search?q=hello&h1=ko HTTP/1.1 )
      method : 서버가 수행할 동작 방식(GET, POST 등..)
      request-target : 절대경로로 시작하는 요청 대상
    • status-line : HTTP-version SP status-code SP reason-phrase CRLF
      (ex> HTTP/1.1 200 OK )
      status-code : 상태 코드(요청 성공 여부)
      reason-phrase : 짧은 상태코드 설명
  • 헤더 : HTTP 전송에 필요한 모든 부가정보가 들어감. 필요시 임의의 헤더 추가 가능.
  • 메시지 바디 : 실제 전송할 데이터(byte로 표현 가능한 모든 데이터)

5. 단순함. 확장 가능

0개의 댓글