본문 바로가기

기타

[HTTP]HTTP의 정의, 특징 및 메시지의 구조

HTTP란?

Hyper Text Transfer Protocol의 약자로 문서 간의 링크를 전송하는 프로토콜이다.

 

HTTP 메시지에 HTML, TEXT, 이미지, 음성, 영상, 파일, JSON, XML 등등 거의 모든 형태의 데이터가 전송 가능하며 서버 간에 데이터를 주고받을 때도 대부분 HTTP를 사용한다.

 

현재 가장 많이 사용하는 HTTP/1.1과 HTTP/2 버전은 TCP를 기반으로 하며 HTTP/3은 성능 개선과 함께 UDP를 기반으로 사용한다.

 

HTTP 특징

클라이언트 서버 구조

  • Request, Response 구조
  • 클라이언트는 서버에 요청을 보내고 응답을 대기하고, 서버가 요청에 대한 결과를 만들어서 응답을 보낸다.

 

무상태 프로토콜

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 장점 : 서버 확장성이 높다.(스케일 아웃)
  • 단점 : 클라이언트가 데이터를 추가적으로 전송해야 된다. -> 클라이언트가 반복적인 데이터 전송
  • Stateful 상태에서의 데이터 전송

초콜릿 구매 -> 2개 -> 카드

 

  • Stateless 상태에서의 데이터 전송

초콜릿초콜릿 구매 -> 초콜릿 2개 -> 초콜릿 2개 카드 구매

초콜릿, 2개와 같이 클라이언트가 같은 데이터를 반복적으로 보낸다.

 

  • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
  • 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설이 가능하다.

 

비연결성

  • HTTP는 기본이 연결을 유지하지 않는 모델
  • 일반적으로 초 단위 이하의 빠른 속도로 응답
  • 서버 자원을 매우 효율적으로 사용할 수 있음
  • 클라이언트 요청마다 TCP/IP 연결을 새로 맺어야 한다. -> 3 way handshake 시간 추가
    • 웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 수많은 자원이 함께 다운로드
    • 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결

 

HTTP 메시지

HTTP 메시지 구조

start-line

요청 메시지

  • start-line : request-line = method SP(공백) request-target SP HTTP-version CRLF(공백 라인)
  • method : GET, POST, PUT, DELETE 등의 서버가 수행해야 할 동작 지정
  • request-target : absolute-path[?query] : 절대경로[?쿼리](/로 시작하는 경로)
  • HTTP-version : HTTP 버전

 

응답 메시지

  • start-line : status-line = HTTP-version SP status-code SP reason-phrase CRLF
  • HTTP-version : HTTP 버전
  • status-code : HTTP 상태 코드(요청 성공, 실패를 나타냄)
  • reason-phrase : 이유 문구(짧은 상태 코드 설명 글)

 

header

  • header-field : field-name: OWS(공백 허용) field-name OWS
  • field-name은 대소문자 구분이 없다.
  • body를 제외한 HTTP 전송에 필요한 모든 부가정보 포함

 

message body

  • 실제 전송할 데이터
  • HTML 문서, 이미지, 영상, JSON, 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

 


출처 : 인프런 우아한 형제들 최연소 기술이사 김영한의 스프링 완전 정복(모든 개발자를 위한 HTTP 웹 기본 지식)

'기타' 카테고리의 다른 글

[HTTP]HTTP 상태코드  (0) 2023.04.09
[HTTP]HTTP 메서드  (0) 2023.04.07
[HTTP]URI URL URN  (0) 2023.04.01
[Lombok] IntelliJ Lombok 설치, 설정  (0) 2023.03.26