ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • http3:
    http 2022. 6. 14. 23:30

    <모든 개발자를 위한 HTTP 웹 기본 지식 정리> 

     

    HTTP (Hyper Text Transfer Protocol)

    : HTTP 메시지에 모든 것을 전송!

    -HTML, TEXT

    -IMAGE, 음성, 영상, 파일

    -JSON, XML (API)

    -거의 모든 형태의 데이터 전송 가능

    -서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용

     

    HTTP/1.1 1997년 : 가장 많이 사용, 가장 중요한 버전!

     

    기반 프로토콜

    -TCP기반 (데이터 많, 속도 느림) : HTTP/1.1, HTTP/2

    -UDP기반 : HTTP/3

    -현재 HTTP/1.1 주로 사용

    -HTTP/2, HTTP/3도 점점 증가

     

    => 확인은 개발자도구/네트워크/protocol

     

    HTTP 특징

    -클라이언트 서버 구조

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

    -HTTP 메시지

    -단순함, 확장 가능

     

    1. 클라이언트 서버 구조

    Request - Response 구조

    (1) 클라이언트는 http 메시지를 통해 서버에 요청을 보내고, 응답을 대기

    (2) 서버가 요청에 대한 결과를 만들어서 응답

    (3) 클라이언트가 응답 결과를 열어서 동작

     

    예전에는 클라이언트와 서버가 분리되어있지 않았음 -> 개념적으로 분리하고, 비지니스 로직과 데이터를 서버에, 클라이언트에다가는 UI, 상용성에 집중 -> 각각 독립적으로 진화가능!

     

    2.무상태 프로토콜(Stateless)

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

     ↔️ Stateful (상태유지) [클라이언트A가 서버1과 상태 유지를 한다면 클라이언트A는 서버2 와는 불가능 -> 서버1이 다운되는 경우 망함]

    -> 서버가 클라이언트의 상태를 보존하지 않는다는건 클라이언트가 요청할때마다 상태를 같이 보내야한다는것!

    -> 서버1이 다운되더라도 서버2에게 상태가 전부 도달하기 때문에 서버2는 응답 가능

    -> <스케일아웃 - 수평 확장 유리>

    -> 클라이언트 요청이 증가해도 (이벤트 같은거) 서버를 대거 투입할 수 있어

    => 무상태는 응답 서버를 쉽게 바꿀 수 있다!!!!! -> 무한한 서버 증설 가능

     

    -장점 : 서버 확장성 높음(스케일 아웃)

    -단점 : 클라이언트가 추가 데이터 전송

    -실무 한계 :

      모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있다.

      ⏺ 상태 유지해야하는 경우 (ex: 로그인)

       로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지

      일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지

      상태 유지는 최소한으로만 사용해야함

     

    3.비연결성(connectionless)

    -tcp 는 보통 연결을 유지 -> 요청 보내고 응답 받기 -> 클라2가 또 요청 , 응답 -> 서버는 클1, 클2와 연결을 계속 유지 -> 서버 자원 소모됨

    -비연결헝은 클1이 서버에 요청하고 응답 받으면 연결 끊어버리기 -> 서버는 연결 유지x , 최소한의 자원 유지

     

    -HTTP는 기본이 연결을 유지하지 않는 모델

    -일반적으로 초 단위 이하의 빠른 속도로 응답

    -1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음 (연결 끊기니까!)

      (예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.

    -서버 자원을 매우 효율적을 사용할 수 있음

     

    -한계

      ⏺ TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가 

      ⏺ 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등등 수 많은 자원이 함께 다운로드

    -극복

      ⏺ 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결

      ⏺ HTTP/2, HTTP/3에서 더 많은 최적화

     

    -HTTP 초기 - 연결, 종료 낭비

    (ex) 클 -> {[연결, 요청/HTML 응답, 종료] -> [연결, 요청/자바스크립트 응답, 종료] -> [연결, 요청/이미지 응답, 종료]}  <- 서버

    -HTTP 지속 연결(Persistent Connections) 

    (ex) 클 -> {[연결, 요청/HTML 응답, 요청/자바스크립트 응답, 요청/이미지 응답, 종료]} <- 서버 => 시간 단축!!

     

    스테이트리스!!

    같은 시간에 딱 맞춰 발생하는 대용량 트래픽 (서버 개발자들이 어려워하는 업무 ex: 선착순 이벤트, ktx 예약, 수강신청)

     

    HTTP 메시지

     

    시작 라인 - 요청 메시지

     

    - start-line = request-line / status-line

    - request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)

     

    1. HTTP 메서드 (GET:조회)

      ⏺ 종류 : GET, POST, PUT, DELETE...

      ⏺ 서버가 수행해야 할 동작 지정

        -GET : 리소스 조회

        -POST : 요청 내역 처리

    2. 요청 대상 (/search?q=hello&hl=ko)

    3. HTTP Version

     

    시작 라인 - 요청 메시지 - HTTP 메서드

    1. 종류 : GET, POST, PUT, DELETE

    2. 서버가 수행해야 할 동작 지정

      ⏺ GET: 리소스 조회

      ⏺ POST: 요청 내역 처리

     

    시작 라인 - 요청 대상

    1. absolute-path[?query] (절대경로[?쿼리])

    2. 절대경로= "/"로 시작하는 경로

     

    시작 라인 - 응답 메시지

    - start-line = request-line / status-line

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

     

    1. HTTP 버전

    2. HTTP 상태 코드 : 요청 성공, 실패를 나타냄

      ⏺ 200 : 성공

      ⏺ 400 : 클라이언트 요청 오류

      ⏺ 500 : 서버 내부 오류

    3. reason-phrase (이유 문구) : 사람이 이해할 수 있는 짧은 상태 코드 설명 글

     

    HTTP 헤더

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

    -field-name 은 대소문자 구분 없음

     

    -용도

      ⏺ HTTP 전송에 필요한 모든 부가정보

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

      ⏺ 표준 헤더가 너무 많음

      ⏺ 필요시 임의의 헤더 추가 가능 (-> 약속한 클라이언트만 이해가능하겠쥐?)

     

    HTTP 메시지 바디

    -용도

      ⏺ 실제 전송할 데이터

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

     

     

    => 단순함 ! 확장 가능 !

    - HTTP는 단순하다.

    - HTTP 메시지도 매우 단순

    - 크게 성공하는 표준 기술은 단순하지만 확장 가능한 기술

     

    HTTP 정리

    HTTP 메시지에 모든 것을 전송

    HTTP 역사 HTTP/1.1을 기준으로 학습

     클라이언트 서버 구조

     무상태 프로토콜(스테이스리스)

    HTTP 메시지

    단순함, 확장 가능

    지금은 HTTP 시대~~

    'http' 카테고리의 다른 글

    http5:  (0) 2022.06.16
    http4:  (0) 2022.06.16
    http4:  (0) 2022.06.15
    http2:  (0) 2022.06.13
    http1:  (0) 2022.06.11
Designed by Tistory.