본문 바로가기
Back-End/HTTP

HTTP 기본

by debugggggger 2023. 3. 14.

 HTTP는 Hyper Text Transfer Protocol의 약자이며, 거의 모든 형태의 데이터를 전송 가능하다.

  • HTML, TEXT
  • IMAGE, 음성, 영상, 파일
  • JSON, XML (API)
  • 서버 간에 데이터를 주고받을 때에도 대부분 HTTP 사용

HTTP의 특징

클라이언트 서버 구조

 Request-Response구조이다. 클라이언트는 서버에 요청을 보내고 응답이 올때까지 대기한다. 서버는 요청에 대한 결과를 만들어서 응답한다.

무상태 프로토콜 (Stateless)

 서버가 클라이언트의 상태를 보존하지 않는다. 서버에서 저장해야하는 정보의 양이 줄어 서버 확장성이 높으며(스케일 아웃) 응답서버를 쉽게 바꿀수 있다. 병렬적으로 무한한 서버 증설이 가능하다. 단점은 클라이언트가 추가 데이터를 전송해야한다.

한계점
모든부분을 무상태로 설계할 수 없기때문에 로그인등의 정보가 필요한경우 브라우저 쿠키와 서버 세션등을 사용해서 상태를 유지한다. 최대한 무상태로 설계하고, 상태유지는 최소한만 사용하도록 한다.

비연결성

 연결을 유지하는 모델에서는 서버 자원을 과도하게 낭비하게 된다. 비연결성 모델은 요청에 대한 응답이 완료되면 연결을 종료한다. 일반적으로 초단위 이하의 빠른 속도로 응답하게 되며, 1시간동안 수천명이 서비스를 사용해도 서버에서 동시에 처리하는 요청은 수십개 이하로 줄어들게 된다. 서버자원을 효율적으로 사용할 수 있게 된다.

 하지만 요청을 보낼때마다 TCP/IP 연결을 새로 맺어야하므로 3 way handshake 시간이 추가되며, 웹브라우저로 사이트를 요청할때 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지등의 수많은 자원이 함께 다운로드된다. 이는 HTTP 지속연결(Persistent Connections)로 문제를 해결할 수 있다. HTML, 자바스크립트, 이미지를 각각 연결하는 방식에서 각 데이터를 전부 전달할때까지 연결을 유지한다.

 같은 시간에 맞추어 발생하는 대용량 트래픽이 발생할 경우도 있다. 선착순 이벤트나 명절 KTX 예약, 학과 수업 등록등이 있다. 이런경우 최대한 stateless하도록 설계해야한다. 예를들면 로그인이 필요없는 정적페이지를 띄워서 사용자들이 페이지를 읽는데 시간을 할애하도록 하고, 이벤트 신청을 받는 방법도 있다.

HTTP 메세지

 

 

시작라인

요청 메세지

  • start-line = request-line
  • request-line = method {SP(공백)} request-target {SP} HTTP-version CRLF(엔터)
  • method : GET/POST/PUT/DELETE
  • 요청 대상(request-target) : 절대경로"/"로 시작하는 경로

응답메세지

  • start-line = status-line로 이루어짐
  • status-line = HTTP-version {SP} status-code {SP} reason-phrase CRLF
  • HTTP 버전
  • HTTP 상태 코드 : 요청 성공, 실패를 나타냄 (200, 400, 500)
  • 이유문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명글

헤더

  • header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
  • field-name은 대소문자 구분 없음
  • HTTP전송에 필요한 모든 부가정보를 갖고있다.
  • ex) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저)정보, 서버 애플리케이션 정보, 캐시 관리 정보
  • 필요시 임의의 헤더 추가 가능

메시지 바디

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

 


참고 강의 : https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

 

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

HTTP - 상태코드  (0) 2023.03.20
HTTP - 메서드 활용  (0) 2023.03.17
HTTP - 메서드  (0) 2023.03.15
HTTP - URL 및 웹브라우저 요청 흐름  (0) 2023.03.14
HTTP - 인터넷 네트워크  (0) 2023.03.13