HTTP

황상익·2024년 4월 22일

HTTP

목록 보기
3/9

HyperTextTransferProtocol
HTTP/1.1 (TCP)을 사용한다. 현대에는 HTTP/2, HTTP/3 (UDP)의 사용량이 급속도로 증가하는 추세
HTTP는 클라이언트 to 서버(요청) 뿐만 아니라, 서버 to 클라이언트(응답)에도 사용되며 서버 to 서버간의 데이터 통신에도 사용된다.

모든 것이 HTTP

HTTP 메시지에 모든 것을 전송

-HTML, TEXT, IMAGE, 음성, JSON, XML
거의 모든 형태의 데이터 전송 가능
서버간 데이터를 주고 받을때도 대부분 HTTP

HTTP/1.1 가장 많이 사용

기반 프로토콜

TCP : HTTP/1.1
-> 기본 메커니즘 복잡하다, 속도 느린편
UDP : HTTP/3

HTTP 특징

클라이언트 서버 구조
무상태 프로토콜(스테이트리스), 비연결성
HTTP 메세지
단순함, 확장 가능성
서버에서 다수의 클라이언트와 상태나 연결을 계속 유지해야 한다면 이에 따른 많은 서버의 리소스가 필요

클라이언트 서버 구조

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

-> client와 Server를 분리
분리하는 것 중요, 비즈니스 로직과 Data -> Server에 넣는다.
Client -> UI & 사용성에 집중
client는 복잡한 비즈니스 로직 다룰 필요 X
단순하게 UI 작성

Server -> 복잡한 비즈니스 로직, 확자, 트래픽 고민

무상태 프로토콜 (Stateless)

서버가 클라이언트의 상태 보존 X

장점 : 서버 확장성 높음 (scale out)
단점 : 클라이언트가 추가 데이터 전송

  1. 상태 유지 (stateful)
    server가 client의 이전 상태를 보존
    도중에 server 끊기거나 변경되면 다시 모든 데이터 전송

  1. 무상태 (Stateless)

무상태의 경우 scale out -> 수평확장에 유리

Stateless와 Stateful 차이

상태유지 : 서버 변경될때 상태정보를 다른 서버에게 알려줘야 한다
무상태 : 서버 변경 되도 괜찮음
클라이언트 요청 증가, 서버를대거 투입 가능
무상태는 응답 서버를 쉽게 변경 가능

Stateless 한계

모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
무상태 -> 로그인 X 단순한 서버
상태 유지 -> 로그인
로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
일반적으로 브라우저 쿠키와 서버 세션을 사용해서 상태 유지
상태는 최소한만 사용

비연결성


클라이언트 1,2,3 모든 서버 연결하고 있어야 한다.

HTTP는 기본이 연결을 유지하지 않는 모델
일반적으로 초 단위의 이하의 빠른 속도로 응답
수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개로 매우 작음
ex) 웹 브라우저에서 계속 연속해서 검색하지 X
서버 자원 매우 효율적으로 사용 가능

한계 & 극복

TCP/IP 연결을 매번 새로 맺어야 한다
웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라
자바스크립트, css, 추가 이미지 등 수 많은 자원이 함께 다운로드
지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
HTTP/2, HTTP/3에서 더 많은 최적화

HTTP Message

HTTP Message는 요청 메세지, 응답 메세지 두 가지 종류가 있고 구조가 각각 다르다.

시작 라인

start - line = request-line
request-line - method SP request-target SP HTTP-vesion CRLF(enter)
+a) SP - 공백

  • HTTP 메서드 (GET 조회)
    요청대상 (/search?q=hello&hi=ko)
    HTTP version

요청 메시지 -> HTTP 메서드 (요청의 의도)
종류 -> GET, POST, PUT, DELETE, UPDATE
서버가 수행해야 할 동작 지정
GET : 리소스 조회
POST : 요청 내역 처리

  • path
    요청 메시지 -> 요청 대상
    absolute-path?query
    절대경로 -"/"로 시작하는 경로

HTTP 응답 메세지

status-line
status-line = HTTP-version SP status-code SP reason-pharse CRLF

Header

  • Response에서만 사용되는 Header 값 존재

Empty Line

  • 공백 필수 값

Message Body

  • 실제 전송하는 데이터가 담겨 있는 부분
  • 만약 전송할 데이터 없다면 Body 공백

HTTP 버전
• HTTP 상태 코드: 요청 성공, 실패를 나타냄
• 200: 성공
• 400: 클라이언트 요청 오류
• 500: 서버 내부 오류
• 이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명

Empty Line

공백 한 줄
필수 값

HTTP Header

hearder-field = field-name":" OWS field-value OWS
+a) OWS -> 띄어쓰기 허용

HTTP 전송에 필요한 모든 부가 정보
예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,
서버 애플리케이션 정보, 캐시 관리 정보.
요청의 추가 정보들을 가지고 있다.!

profile
개발자를 향해 가는 중입니다~! 항상 겸손

0개의 댓글