HTTP

  • HyperText Transfer Protocol
  • 인터넷상에서 클라이언트와 서버가 자원을 주고받을 때 사용하는 통신 규약
  • 거의 모든 형태의 데이터 전송이 가능하며, 서버간에 데이터를 주고받을 때도 대부분 HTTP 사용
    • HTML, TEXT
    • IMAGE, 음성, 영상, 파일
    • JSON, XML (API)
  • 주로 TCP 기반의 통신 방식
  • 특징
    • 클라이언트 서버 구조
    • 무상태 프로토콜
    • 비연결성
    • HTTP 메시지
    • 단순하고 확장 가능

1. 기반 프로토콜

  • TCP : HTTP/1.1(가장 많이 사용), HTTP/2
  • UDP : HTTP/3

2. 특징

1) 클라이언트 서버 구조

  • Request Response 구조
  • 클라이언트는 서버에 요청을 보내고, 서버는 요청에 대한 결과를 만들어서 응답
  • 클라이언트는 UI, 서버는 비즈니스 로직에 집중할 수 있게 되었다.

2) 무상태 프로토콜(stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는다.
    • 중간에 서버가 변경되어도 요청과 응답에 지장이 없다.
  • 모든 것을 무상태로 설계할 수 없는 경우도 있다.
    • ex) 로그인을 하는 경우 로그인한 상태를 서버에서 유지해야한다.
    • 브라우저 쿠키와 서버 세션 등을 사용해서 상태 유지 가능
    • 전송 데이터양이 증가하기 때문에, 상태 유지는 최소한만 사용
  • 장점 : 서버 확장성 높음(스케일 아웃)
  • 단점 : 클라이언트가 추가 데이터 전송

3) 비연결성

  • HTTP는 기본이 연결을 유지하지 않는 모델이다. 즉, 한 번의 요청과 응답이 끝나면 TCP 연결이 종료된다.
  • TCP 기반의 경우 요청할 때마다 연결을 새로 맺어야 한다는 단점이 있지만, HTTP 지속 연결로 이러한 문제를 해소하였다.
    • HTTP/2, HTTP/3에서는 더욱 최적화됨.
  • 비연결성 덕분에 서버 자원을 효율적으로 사용.

4) HTTP 메시지

  1. start-line
    • request-line(요청 메시지의 경우) : method SP request-target SP HTTP-version CRLF
      • HTTP 메서드(ex. GET)
      • 요청 대상(ex. /search?q=hello&hl=ko)
      • HTTP 버전(ex. HTTP/1.1)
    • status-line(응답 메시지의 경우) : HTTP-version SP status-code SP reason-phrase CRLF
      • HTTP 버전
      • HTTP 상태 코드 : 요청 성공, 실패를 나타냄 (ex. 200)
      • 이유 문구 : 사람이 이해할 수 있는 짧은 상태코드 설명 글 (ex. OK)
  2. HTTP 헤더
    • HTTP 전송에 필요한 모든 부가 정보가 포함된다.
      • ex) 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보 등
    • 필요시 임의의 헤더 추가 가능
  3. HTTP 메시지 바디
    • 실제 전송할 데이터
    • HTMl 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능

5) 단순하고 확장 가능

3. 문제점

  • HTTP는 평문 통신이기 때문에 도청이 가능하다
  • 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
  • 완정성을 증명할 수 없기 때문에 변조가 가능하다.

이러한 문제점을 해결하기 위해 HTTPS가 등장했다.

 

+ Recent posts