Back-End/HTTP

HTTP 기본

Meluu_ 2024. 8. 17. 10:27

💠HTTP?

'Hyper Text Transfer Protocol'
➡️ HTML같은 리소스 데이터들을 주고받는 프로토콜

  • 모든 것 전송 가능
  • HTML,TEXT, 이미지, 음성, 영상,JSON,XML(API) 등
    일반적으로 알려진 거의 모든 파일을 전송
  • 서버 간 데이터 통신에도 대부분 HTTP를 사용
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3

HTTP/1.1 주로 사용
하지만 구글이나 네이버같은 사이트를 보면 HTTP/2, HTTP/3를 많이 사용한다.


해당 사이트에서 어떤 프로토콜을 사용하는 지 보는 방법
크롬 브라우저를 기준으로 F12를 눌러 NETWORK상태 창에서

Protocol을 보면 나온다 .
없을시 저 부분을 우클릭하여 프로토콜을 추가
만약 아무것도 안나올 시 Filter부분에 뭔가 있는지 확인


🧫 HTTP 특징

  • 클라이언트 서버 구조
    • Request Response 구조
    • 클라이언트는 서버에 요청 전송, 응답 대기
    • 서버가 요청에 대한 결과를 만들어서 응답클라이언트 : pc, 모바일, tv 등
  • 무상태(Stateless) 프로토콜
    • 서버가 클라이언트의 상태를 보존 X
    • 장점 : 서버의 확장성 높음(스케일 아웃)
      • 스케일아웃: 서버를 여러 대 추가하여 시스템을 확장하는 것
    • 단점 : 클라이언트가 추가 데이터 전송 (요청사항을 하나부터 끝까지 한 요청에 알려줘야함)
  • 상태유지(Stateful)과 무상태(Stateless)의 차이
    • 상태유지 : 중간에 서버가 바뀌면 안된다.
      • ( 바뀔 시 상태 정보를 바뀐 서버에게 미리 알려줘야한다.)
    • 무상태 : 중간에 다른 서버로 바뀌어도 된다.
      • 대용량 트래픽 발생시 스케일 아웃으로 대처가능
    • 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한 서버 증설 가능
  • Stateless 실무 한계
    • 모든 것을 무상태로 설계할 수는 없다.
    • 상태 유지를 해야하는 경우에는 쿠키와 서버 세션등을 사용해 상태 유지
    • 단, 상태유지는 최소한으로만 사용

 


♾️ 비연결성 (connectionless)

연결 유지 모델 : 서버가 클라이언트와 연결을 계속 유지하여
                       서버 자원을 소모

비연결 모델 : 서버 연결 유지 x, 최소한의 자원으로 유지
                    (요청과 응답을 한 번 하고 TCP/IP 연결을 끊는다.)

  • HTTP는 기본이 비 연결 모델
  • 일반적으로 초단위 이하의 빠른 속도 응답
  • 한 시간대에 수천명이 서비스를 사용해도
    실제 서버의 동시처리 요청은 수십개 이하로 적음
    • 악의적으로 무한 새로고침 or 연속검색을 하는 경우를 제외
  • 서버 자원을 매우 효율적으로 사용 가능


✔️ 한계와 극복

한계

  • TCP/IP 새로 연결 - 3 way handshake
  • 웹 브라우저로 사이트 요청시 HTML뿐만 아니라 Js, css,추가 이미지 등 수많은 자원이 함께 다운로드

극복

  • HTTP 지속연결(Persistent Connections)로 해결
  • HTTP/2,3에서 더 많은 최적화

✔️ 지속 연결

  • HTTP에서 TCP/IP 연결을 일정시간 유지하여 여러 요청을 하는 것
  • 일정 시간 동안 통신이 없으면 연결은 자동으로 끊김

무상태 설계를 하자

 

 

📦 HTTP 메세지


GET /search?q=http&hl=ko HTTP/1.1
Host: www.google.com

empty line 공백라인(CRLF) - 필수
message body - html 혹은 이미지, 영상, 파일같은 것

HTTP 메세지 구조

 

✔️시작라인


요청 메세지

start-line = request-line
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
  • HTTP 메소드 (GET : 조회)
  • 요청 대상 (/search?q=http&hl=ko)
  • HTTP 버전

HTTP 메소드

  • 종류 : GET, POST, PUT, DELETE 등
  • 서버가 수행해야 할 동작 지정
    GET : 리소스 조회
    POST : 요청 내역 처리

요청 대상

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

참고 : *, http://...?x=y 와 같이 다른 유형의 경로 지정 방법도 있다.

 

📨 응답 메시지

start-line = status-line
status-line= HTTP-version SP status-code SP reason-phrase CRLF
  • HTTP 버전
  • HTTP 상태 코드 : 요청 성공, 실패
    • 200 : 성공
    • 400 : 클라이언트 요청 오류
    • 500 : 서버 내부 오류
  • 이유 문구 : 사람이 이해할 수 있는 짧은 코드 설명 글

 

🔹 HTTP 헤더

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

🏷️ field-name은 대소문자 구문 없음 (단, value 는 대소문자 구분)

✔️ 용도
HTTP 전송에 필요한 모든 부가정보
표준 헤더가 너무 많음
필요시 임의의 헤더 추가 가능

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

HTTP는 단순함 확장 가능

 

 

 

📖 출처 및 참고자료



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

Http 아이콘 제작자: Freepik - Flaticon

위키백과

'Back-End > HTTP' 카테고리의 다른 글

HTTP 상태코드  (0) 2024.08.17
HTTP - 메서드  (0) 2024.08.17
HTTP - URI & 웹 브라우저 요청 흐름  (0) 2023.11.02
HTTP - 인터넷 네트워크  (0) 2023.11.02