[HTTP] HTTP 기본

chael_lo·2022년 4월 28일
0

HTTP

목록 보기
3/6

HTTP

http 메세지에 모든 것을 담아서 전송할 수 있다.

  • HTML, text
  • image, 음성, 영상, 파일
  • json, xml
  • 서버간의 데이터 통신

HTTP 역사

HTTP/0.9 -> HTTP/1.0 -> HTTP/1.1 -> HTTP/2 -> HTTP/3

  • HTTP/0.9: GET 메서드만 지원, 헤더x
  • HTTP/1.0:메서드, 헤더 추가
  • HTTP/1.1: 가장 많이 사용
  • HTTP/1.1 이후 성능 개선

기반 프로토콜

TCP: HTTP/1.1, HTTP/2
UDP: HTTP/3

예시) 크롬 브라우저에서 개발자 도구 Network에서 protocol 확인하기
h2는 HTTP/2를 말한다.

HTTP 특징

클라이언트 서버 구조(Request Response)

각각 독립적으로 발전하기 위해 클라이언트 서버 개념을 분리하는 것이 중요하다.

  • 클라이언트
    서버에 요청(Request)을 보내고 응답을 대기한다.
    UI, 사용성
  • 서버
    요청에 대한 결과를 만들어서 응답(Response)한다.
    비지니스 로직, 데이터

무상태 프로토콜(Stateless)

HTTP는 무상태 프로토콜을 지향한다.
서버가 클라이언트의 상태를 보존하지 않는다.

  • 장점: 서버 확장성이 높다.
  • 단점: 클라이언트가 추가로 데이터를 전송해야 한다.

상태 유지(Stateful), 무상태(Stateless) 차이

상태 유지(Stateful)
항상 같은 서버가 유지되어야 한다.
최소한으로 사용하는 것이 좋다.
일반적으로 쿠키 세션을 사용해서 상태를 유지한다.
예시) 로그인

무상태(Stateless)
상태 유지X, 응답 서버를 쉽게 바꿀 수 있다.
클라이언트가 요청을 할 때 필요한 정보를 다 담아서 보내기 때문에 서버가 바뀌어도 된다.
갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
스케일 아웃(서버를 늘리는 것, 수평 확장) 유리하다.
전송된 데이터가 상태 유지(Stateful)에 비해 많다.

비 연결성(connectionless)

HTTP는 기본이 연결을 유지하지 않는 모델이다.
서버는 연결을 유지하지 않고 요청이 필요할 때 연결한다.

TCP/IP 연결 ->
클라이언트의 요청 -> 서버 응답 -> 연결 종료

특징
서버는 최소한의 자원으로 유지할 수 있다.
일반적으로 초 단위의 이하의 빠른 속도로 응답한다.
수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 작다.

한계와 극복
TCP/IP 연결을 새로 맺어야 한다(3 way handshake 시간 발생).
브라우저로 사이트 요청을 하면 수많은 자원(HTML, Js, css 등)이 함께 다운로드 된다.
지금은 지속 연결(Persistent Connections)로 문제를 해결하였고, HTTP/2, HTTP/3에서 더욱 최적화 되었다.

지속 연결이란
클라이언트 요청 후 서버와 연결한다.
필요한 자원을 각각 요청 후 모두 응답 받고 그 후 연결이 종료하는 것을 말한다.

HTML 요청 -> 서버 응답 -> //각각 연결된 상태
CSS 요청 -> 서버 응답 ->
JS 요청 -> 서버 응답 ->
연결 종료

연결을 계속 유지하는 모델이라면?
서버는 연결을 계속 유지하고, 서버 자원이 소모된다.
서버는 사용하지 않은 클라이언트도 연결을 계속 유지해야 한다.

TCP/IP 연결 -> 
클라이언트1의 요청 -> 서버 응답 ->
클라이언트2의 요청 -> 서버 응답 ->
클라이언트3의 요청 -> 서버 응답

HTTP 메세지

HTTP 메세지의 구조

start-line 시작 라인

header 헤더

empty line 공백 라인(CRLF)

message body
  • header(헤더)
    메세지 바디 내용, 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보
    HTTP 전송에 필요한 모든 부가 정보를 담고 있다.
    표준 헤더가 많다.
    필요할 경우 임의의 헤더를 추가할 수 있다.

  • message body(바디)
    실제 전송할 데이터
    html 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터를 전송할 수 있다.

HTTP 요청 메세지

시작라인(GET /search~)
헤더(Host:www~)

예시)
GET /search?q=hello HTTP/1.1
Host:www.google.com
  • 시작라인 = 요청 내용을 보여준다(request-line)
    • HTTP 메서드 SP(공백) 요청 대상 SP HTTP 버전 CRLF(엔터)
    • HTTP 메서드
      서버가 수행해야 할 동작을 지정한다.
      예시)Get 리소스 조회, Post 요청 내역 처리
    • 요청 대상
      서버가 요청하는 대상을 적는다.
      예시)절대 경로?query
    • HTTP 버전

HTTP 응답 메세지

시작라인(HTTP/1.1 200 0k)
헤더(Content-Type~)
공백
바디
  • 시작라인 = 응답 결과를 보여준다(status-line)
    • HTTP 버전 SP 상태 코드 이유 문구 CRLF
    • HTTP 버전
    • HTTP 상태 코드: 요청 성공, 실패
      • 200 성공
      • 400 클라이언트 요청 오류
      • 500 서버 내부 오류
    • 이유 문구: 이해할 수 있는 짧은 글

출처: 모든 개발자를 위한 HTTP 웹 기본 지식

profile
천천히 꾸준히

0개의 댓글