본문 바로가기
Computer Science/Network

[Network] HTTP 웹 기본 지식 - 3. HTTP 기본 개념

by pilgyeong 2023. 2. 8.

 

 

1. 개요

1.1 HTTP(Hyper Text Transfer Protocol)

최초에는 문서간 링크를 통해 연결할 수 있는 프로토콜로 사용되었으나, 현재에는 모든 것을 전송한다.

  • HTML, TEXT
  • Image, Media, File
  • JSON, XML
  • etc..

 

1.2 기반 프로토콜

  • TCP: HTTP/1.1, HTTP/2 는 TCP 기반이다.
  • UDP: HTTP/3
  • 현재 대부분은 HTTP/1.1을 사용하는 데, HTTP/2, HTTP/3의 사용도 점차 증가 중이다.
  • TCP 통신은 3 way handshake 때문에 신뢰성과 연결성은 보장하지만, 이 과정에 걸리는 시간만큼 속도가 떨어질 수 밖에 없다. 그렇기에 HTTP/3에서는 UDP 프로토콜을 애플리케이션 레벨에서 재설계를 해서 속도를 높혔다.

 

 

2. 특징

2.1 클라이언트 서버 구조

  • 클라이언트는 요청(request)을 보내고, 서버는 요청에 대한 결과를 응답(response)하는 구조이다.
  • 이런 방식으로 클라이언트와 서버를 분리함으로써 각각의 역할에 맞는 책임만 수행하면 되기에 각 역할은 자신의 책임에 집중할 수 있다. 이렇게 사용함으로써 트러블 슈팅이 발생했을 때도 이슈가 생긴 지점에서만 관리하면 된다.

 

2.2 무상태 프로토콜(Stateless Protocol)

  • 무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않는다.
  • 클라이언트와 서버의 결합도가 매우 낮다.
  • 중간에 서버를 변경해도 되기에 Scale-out (수평확장)이 편리하다.

출처 : 김영한(인프런) - 모든 개발자를 위한 HTTP 웹 기본 지식

참고. 무상태 프로토콜의 실무적 한계
로그인 서비스와 같이 특정 상태가 있어야 하는 서비스도 있기 때문에 설계적인 한계도 존재하며, 매번 모든 데이터를 보내야 한다는 점도 문제가 될 수 있다. 로그인은 쿠키, 세션 등을 이용해 상태를 유지하고자 한다.

 

2.3 비연결성(connectionless)

출처 : 김영한(인프런) - 모든 개발자를 위한 HTTP 웹 기본 지식

  • 클라이언트와 서버가 요청(request) 시에만 연결이 되며, 그 외에는 연결을 유지 하지 않는다. 계속 연결을 유지하는 것도 결국 비용이므로, 이런 연결을 최소화함으로써 비용을 절감한다.

 

 

 

3. 문제점과 해결

3.1 문제점(단점)

출처 : 김영한(인프런) - 모든 개발자를 위한 HTTP 웹 기본 지식

  • 매번 새로 연결해야하기 때문에 매 연결에 들어가는 비용이 발생할 수 있다.
  • TCP/IP는 매번 연결 시 '3 way handshake' 시간이 추가된다.
  • 웹 사이트 기준으로 HTML, CSS, JS, Image 같은 자원들도 다운로드한다.

 

3.2 해결 - HTTP 지속 연결(Persistent Connections)

출처 : 김영한(인프런) - 모든 개발자를 위한 HTTP 웹 기본 지식

  • 클라이언트와 서버가 연결을 한 뒤 필요한 자원을 요청/응답으로 다운로드 받는다.
  • 각각의 자원이 별도의 연결/종료되는 것이 아니라 한 연결에 필요 정보를 모두 다운 받은 뒤에 종료함으로써 연결/종료에 걸리는 시간을 단축할 수 있다.

 

 

 

4. HTTP 메세지 구조

출처 : 김영한(인프런) - 모든 개발자를 위한 HTTP 웹 기본 지식

4.1 시작 라인

4.1.1 요청 메세지

  • start-line = request-line / status-line
  • request-line = method SP(공백) request-tartget SP HTTP-version. CRLF(엔터)

HTTP 메소드

  • 종류: GET, POST, PUT 등
  • GET: 리소스 조회
  • POST: 요청 내역 처리

요청 대상

  • absulute-path[?query] (절대경로[?쿼리])
  • 절대경로 = "/"로 시작하는 경로

HTTP 버전

 

4.1.2 응답 메세지

  • start-line = request-line / status-line
  • status-line = HTTP-version SP status-code SP reason-pharse CRLF

 

HTTP 버전

  • HTTP 상태 코드
    • 200: 성공
    • 400: 클라이언트 요청 오류
    • 500: 서버 내부 오류
  • 이유 문구

 

HTTP 헤더

  • header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
  • field-name은 대소문자 구분 없음

 

  • HTTP 헤더 용도
    • HTTP 전송에 필요한 모든 부가정보 (ex. 메세지 바디의 내용, 메세지 바디의 크기, 압축, 인증, 요청 클라이언트 정보 등)
    • 표준 헤더가 너무 많음
    • 필요시 임의의 헤더 추가 가능
  • HTTP 바디
    • 실제 전송할 데이터
    • HTML 문서, 이미지, 영상, JSON 등

 

 


출처.

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com