HTTP 기본

hb-developer·2021년 5월 3일
0

네트워크

목록 보기
2/3

본 게시글은 인프런 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 을 기반으로 작성되었습니다.

HTTP

HTTP란 (HyperText Transfer Protocol)의 약어이자 W3 에서 정보를 주고받을수 있는 통신 규약 입니다.
처음에는 HTML 을 주고받는데 사용되었지만, 현재에는 이미지,영상,JSON,XML,서버간의 데이터 등
사실상 모든곳에서 HTTP를 사용하고 있습니다.

HTTP의 역사

  • HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X
  • HTTP/1.0 1996년: 메서드, 헤더 추가
  • HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전
  • RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)
  • HTTP/2 2015년: 성능 개선
  • HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선

HTTP1.1은 무려 15년동안 릴리즈 되었기때문에 극도로 안정되었고 거의 모든기능이 들어가있기 때문에 현재 가장 많이 사용하는 버전입니다. 현재 버전은 RFC7230~7235(2014)

HTTP는 다음과 같은 특징이 있습니다.

  • 클라이언트 서버 구조

  • 무상태 프로토콜(스테이스리스), 비연결성

  • HTTP 메시지

  • 단순함, 확장 가능

클라이언트 서버 구조

현재에는 익숙한 클라이언트,서버 구조가 과거에는 개념조차 모호했습니다. 하지만

HTTP 에서 클라이언트는 UI 에 집중을 하고 서버는 응답과 처리에 집중을 하게됩니다.

Stateful, Stateless(무상태 프로토콜)

Stateless 이란 무상태 프로토콜을 의미하고 다음과 같은 특징이 있습니다.

  • 서버가 클라이언트의 상태를 보존X
  • 장점: 서버 확장성 높음(스케일 아웃)
  • 단점: 클라이언트가 추가 데이터 전송

Stateless 는 한번에 받아서 처리하기때문에 중간에 점원이 바뀌어도 상관이 없습니다.
서버1이 마비가 될때 서버 2로 넘겨도 처리가 가능하죠 그렇기 때문에 무한적 수평확장이 가능합니다. 대부분 Stateless 를 최우선적으로 사용합니다.

반면 Stateful 은 데이터를 유지하지만 점원이 바뀌면 처음부터 다시 해야합니다.
즉 서버가 마비되면 처음부터 다시해야 합니다.

따라서 Stateful 은 보통 로그인을 서버에 유지 할때 사용하며
로그인과 같이 필요한경우에만 사용 합니다.

비연결성

HTTP 는 다음과 같은 특징이 있습니다.

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

요약을 하자면 TCP/IP 로 연결후 3way handshake 을 할텐데 데이터를 주고 받으면 연결을 끊습니다.
그렇게 되면 많은 사용자가 이용해도 리소스를 다시 확보해서 사용하기 때문에 자원관리가 효율적입니다.

하지만 다음과 같은 한계점이 있습니다.

  • 추후작업을 할때 tcp/ip 를 또 연결해야함
  • HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등등 수 많은 자원이 함께 다운로드

무언가 할때마다 또 (html,css,js,image) 을 받을때마다 끊고 연결을 반복합니다.

그래서 최근에는 HTTP 지속 연결(Persistent Connections) 을 통해
모든 자원을 받은뒤 연결을 끊습니다.

HTTP/2, HTTP/3(udp)를 사용해서 최적화를 하기도 합니다.

HTTP 메세지

HTTP 는 다음과 같은 구조를 가지고 있습니다.

start-line

요청

start-line = request-line
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
(메서드 , 타겟 , HTTP 버전 순으로 들어간다)

HTTP 메서드

메서드의 종류는 다음과 같습니다.
)GET, POST, PUT, DELETE

  • GET: 리소스 조회
  • POST: 요청 내역 처리

타겟

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

HTTP 버전

HTTP Version EX) HTTP/1.1

응답

start-line = status-line
status-line = HTTP-version SP status-code SP reason-phrase CRLF

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

HTTP Header

헤더구조
header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)

헤더에는 HTTP 전송에 필요한 모든 부가정보가 들어있습니다.

  • 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,
    서버 애플리케이션 정보, 캐시 관리 정보...

HTTP BODY

실제 HTML 데이터

  • HTML 문서, 이미지, 영상, JSON 등등
profile
배우면 바뀐다

0개의 댓글