HTTP란?

zito·2024년 9월 10일
post-thumbnail

HTTP란

HTTP(Hypertext Transfer Protocol)란 텍스트기반의 통신 규약으로,
인터넷에서 데이터를 주고 받을 수 있게 돕는 Protocol입니다.

HTTP에 맞춰 프로그램을 개발함으로써, 프로그램끼리 서로 통신할 수 있습니다.

배경

HTTP의 배경에는 Tim Berners-Lee와 그의 팀이 만든 World Wide Web이 있습니다.

Tim Berners-Lee는 1989년 인터넷을 통한 하이퍼텍스트 시스템을 만들기 위해 제안합니다.
해당 시스템은 초기에 Mesh라고 불리었으며, 구현과정에서 World Wide Web으로 이름을 바꾸었습니다.

해당 시스템은 TCP/IP를 기반으로 하며, 크게 4가지 구성요소로 이루어져있습니다.

  • HTML(HyperText 문서를 표현하기 위한 언어)
  • HTTP(HyperText 문서를 교환하기 위한 Protocol)
  • World Wide Web(문서를 보여주고 수정하기 위한 Client. 최초의 웹 브라우저)
  • 문서에 접근하도록 해주는 Server. httpd의 초기버전

즉, HTTP는 HyperText 문서를 교환하기 위한 Protocol로 시작되었습니다.

(위 아저씨는 World Wide Web을 만드신 Tim Berners-Lee 출처)

Tim Berners-Lee의 포스트
World Wide Web의 공식적인 출발점으로 여겨집니다.

HTTP 특징

  • HTTP Message는 Server와 Client에 의해 해석됩니다.
  • Client-Server Model 을 따릅니다.
  • 상태 정보를 저장하지 않습니다. 즉, Stateless 합니다.
  • Client 요청에 따른 응답을 보낸 후 연결을 끊습니다. 즉, Connectionless 합니다.
  • TCP/IP를 사용하는 응용 Protocol 입니다.

장점

  • 통신간의 연결 상태 처리나 상태 정보를 관리할 필요가 없어 서버 디자인이 간단합니다.

단점

  • 이전 통신의 정보가 없어 매번 새로운 연결을 해줘야합니다.
    이러한 문제를 해결하기위해, 쿠키나 세션등을 사용하여 데이터를 처리합니다.

HTTP의 동작

Client가 Server에 요청시, Server는 요청사항에 맞는 결과를 response합니다.
HTML뿐만이 아니라, JSON, XML 등의 정보를 주고받을 수 있습니다.

Request

Client가 Server에 요청을 보내는 것을 Request라고 합니다.
이 때, 요청을 보내는 정보를 담을 메시지가 필요한데, 이를 HTTP 메시지라고 합니다.
반대로 Server가 응답할때의 정보를 담는 메시지도 HTTP 메시지라고 합니다.

HTTP 메시지는 시작줄, 헤더, 본문으로 이루어집니다.
아래 실제 Request HTTP 메시지를 보면서 좀 다 자세히 살펴보겠습니다.

GET https://www.zerocho.com HTTP/1.1 # 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... # 헤더
Upgrade-Insecure-Requests: 1 

(본문 없음)

시작줄은 메서드와 주소, 버전으로 이루어져있습니다.

위 메시지에서는,

을 사용하고 있는것을 확인할 수 있습니다.

헤더에는 요청에 관한 정보를 담고있습니다.
헤더의 종류는 굉장히 많은 관계로 다른 글에서 따로 다루겠습니다.

대표적인 HTTP 메서드

  • GET: 자료를 요청
  • POST: 자료 생성을 요청
  • PUT: 자료 수정을 요청
  • DELETE: 자료 삭제를 요청

Response

Request의 HTTP 메시지를 살펴보았습니다.
이번에는 Request에 따라 Server가 Client에 보내는 Response HTTP 메시지를 확인해 보겠습니다.

HTTP/1.1 200 OK # 시작줄
Connection: keep-alive # 헤더
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;

<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title... # 본문

Request HTTP 메시지와 마찬가지로 시작줄, 헤더로 시작합니다.
하지만 이번에는 본문이 추가되어있습니다.

시작줄은 버전, 상태코드, 상태메시지로 이루어져있습니다.

위 메시지의 시작줄에서는,

  • 버전: HTTP/1.1
  • 상태코드: 200
  • 상태메시지: OK

를 사용하고 있는 것을 확인할 수 있습니다.

헤더에는 응답에 관한 정보를 담고있습니다.

본문에는 HTML이 담겨있습니다. 웹브라우저는 해당 HTML을 사용해 화면을 렌더링합니다.

상태코드

  • 1xx(조건부응답): 요청을 받았으며 작업을 계속합니다.
  • 2xx(성공): 요청 수신, 이해, 승낙, 처리를 뜻합니다.
  • 3xx(Redirection OK): Client는 요청을 마치기위해 추가작업이 필요합니다.즉 서버는 클라이언트에게 다른위치로 재전송을 요청합니다.
  • 4xx(요청오류): Client 측에서 오류가 있었음을 뜻합니다.
  • 5xx(서버오류): Server측에서 요청처리를 실패했음을 뜻합니다.

참고
https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
https://velog.io/@wnstj1128/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EB%8C%80%EB%B9%84-Network
https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

profile
DevOps Engineer를 희망하는 Network Engineer입니다.

0개의 댓글