HTTP 개념

HUSII·2023년 1월 18일
0

HTTP(HyperText Transfer Protocol)

HTTP 메시지에 모든 것을 전송한다.
ex) html, text, json, xml(API), 이미지, 음성, 영상, 파일 등등

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

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

HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(stateless), 비연결성
  • HTTP 메시지 사용
  • 단순함, 확장 가능

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

무상태 프로토콜 (stateless)
서버가 클라이언트의 상태를 보존x
장점: 서버 확장성 높음, 중간에 서버가 바껴도 ㄱㅊ
단점: 클라이언트가 추가 데이터 전송

비연결성(connectionless)
연결 하지 않으므로 빠른 속도로 응답한다.
서버 자원을 매우 효유적으로 사용할 수 있다.

  • 일반적으로 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.

단점: TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가됨
지금은 HTTP 지속 연결로 문제 해결함
-> 메시지 주고받을때마다 연결맺고 끊는 것이 아니라, 메시지를 안받아도 일정 시간동안 연결해 놓는 것

HTTP 메시지
HTTP 요청 메시지와 응답 메시지가 있다.

메시지 구조
start-line 시작 라인
header 헤더
empty line 공백 라인
message body

요청 메시지

시작 라인 = request-line / status-line
request-line = method SP(공백) request-target SP HTTP-verision CRLF(엔터)
HTTP method (GET:조회)
요청 대상 (/search?q=hello&hl=ko)
HTTP version (HTTP/1.1)

요청메시지 - HTTP 메서드
종류: GET, POST, PUT, PATCH, DELETE
서버가 수행해야 할 동작 지정

요청메시지 - 요청 대상
절대경로와 쿼리 파라미터
절대경로: / 로 시작하는 경로

응답 메시지

시작 라인 = request-line / status-line
status-line = HTTP-version SP status-code SP reason-phrase CRLF
HTTP 버전
HTTP 상태 코드: 요청 성공, 실패 나타냄
ex) 200(성공), 400(클라 요청 오류), 500(서버 내부 오류ㅠ)

HTTP 헤더

  • 용도: HTTP 전송에 필요한 모든 부가정보
    ex) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라 정보, 서버 정보, 캐시 관리 정보, ...
  • 표준 헤더 엄청 많음
  • 임의로 헤더 추가 가능

HTTP 메시지 바디

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


HTTP는 단순하다. 그래서 확장 가능하다
그래서 HTTP만 쓴다.

profile
공부하다가 생긴 궁금한 것들을 정리하는 공간

0개의 댓글