컴퓨터/Network

[Network] HTTP에 대해서 자세히 알아보자

도도새 도 2023. 10. 30. 16:58

HTTP란?

 

http(hypertext transfer protocol)는 웹의 기반이 되는 통신 프로토콜이다. http는 http request와 http response로 이루어진다. 즉 요청과 응답으로 이루어진 단순한 프로토콜이라고 할 수 있다. 수신자 측에 의해 요청이 초기화되는 클라이언트-서버 프로토콜에 속한다.

어플리케이션 레이어에 속해있기에 트랜스포트 레이어인 TCP를 사용하고 있다. 따라서 HTTP를 사용하기 전에 TCP 커넥션을 생성하여야한다.

 

Non-persistent HTTP

 

요청-응답을 주고 받은 후 TCP 커넥션을 끊을 경우 Non-persistent HTTP라고 한다. 각각의 요청과 응답 간에 전체 TCP 핸드셰이크 프로세스가 반복되는 형식이다. 이로 인해 전송 시간과 네트워크 지연이 발생하며, 성능 면에서 효율성이 떨어질 수 있다.

 

Persistent HTTP

 

요청-응답을 주고 받은 후 TCP 커넥션을 끊지 않을 경우 Non-persistent HTTP라고 한다. Persistent HTTP는 일반적으로 HTTP/1.1 이상의 버전에서 지원되며, "Connection: keep-alive" 헤더를 사용하여 지속적인 연결을 설정하거나 유지하게 된다. 현재 웹 브라우저의 경우 기본적으로 헤더에 Connection을 기입하지 않으면 Persistent HTTP를 사용하게 된다.

 

HTTP의 특징

 

  1. 무상태(Stateless)
  • HTTP는 단순히 요청에 대한 응답을 해줄 뿐이다. 즉 이전 요청에 대한 정보 등을 기억하지 않고, 각 요청은 독립적으로 존재한다.
  1. 클라이언트-서버 모델
  • HTTP는 클라이언트-서버 아키텍처를 기반으로 작동하낟. 클라이언트가 서버에 HTTP요청을 보낼 경우 서버는 요청에 대한 응답을 클라이언트에 반환하게 된다.
  1. 텍스트 기반
  • HTTP요청과 응답은 주로 텍스트로 구성되며, HTTP메시지는 헤더와 본문으로 구성된다.

 

HTTP는 기본적으로 무상태를 가지지만 쿠키, 세션 등을 통하여 각 요청, 응답이 상태를 공유할 수 있다. 쿠키는 HTTP 헤더(Set-Cookie)를 사용하여 설정하게 된다. 하나의 Set-Cookie 응답헤더에는 하나의 쿠키만 담을 수 있다. 서버로 받은 쿠키는 브라우저를 통해 클라이언트 컴퓨터의 하드디스크에 저장된다.

ex) Set-Cookie: <이름>=<값>

클라이언트-서버 모델에서는 서버가 요청 없이 클라이언트로 데이터를 보낼 수 없기에 쿠키의 전달은 서버가 클라이언트의 요청에 응답할 때 이루어진다.

 

HTTP의 요청과 응답

 

HTTP요청

 

인터넷을 통해 생성된 각 HTTP 요청은 일련의 인코딩된 데이터를 전달하게 된다. HTTP요청에는 일반적으로 아래의 요소들이 포함된다.

  • HTTP 버전
  • URL
  • HTTP 메서드
  • HTTP요청 헤더
  • HTTP 요청 본문(선택)

위의 사항은 개발자 모드에서 확인할 수 있다. 예를 들어 아래와 같다.

HTTP 요청

HTTP 메서드

HTTP메서드는 HTTP요청이 쿼리된 서버에서 기대하는 작업을 나타낸다. 일반적으로 “GET”, “POST”가 있으며, 이에 더해 “PUT”, “DELETE”가 있다.

 

HTTP 요청 헤더

HTTP 요청 헤더에는 키-값 쌍으로 된 요청에 대한 텍스트 정보가 포함된다.

HTTP 요청헤더

 

HTTP 요청 본문

요청 본문에는 요청할 본문이 담긴다. 예를 들면 아이디 비밀번호를 입력했을 시 서버로 제출될 아이디와 비밀번호가 해당 요청 본문에 담기게 된다.

 

 

HTTP 응답

 

HTTP응답의 경우 요청에 대해 서버가 수신하는 응답이 담기게 된다. 다음이 포함된다.

  • HTTP 상태 코드
  • HTTP 응답 헤더
  • HTTP 본문(선택)

 

HTTP 상태 코드란?

HTTP 상태 코드는 HTTP 요청이 성공적으로 완료되었는지 여부를 나타내는 데 가장 사용되는 3자리 코드이다. 상태 코드는 다음 5개 블록으로 나뉘게 된다.

  1. 1XX Informational
  2. 2XX 성공
  3. 3XX 리디렉션
  4. 4XX 클라이언트 오류
  5. 5XX Server Error

*XX는 각기 다른 숫자를 나타낸다.

일반적으로 2로 시작되는 코드는 응답 성공을 나타낸다. 일반적으로 “200 OK”로 응답 요청이 정상임을 확인한다.

반면 4나 5로 시작할 경우 오류가 발생했음을 나타낸다.

'4'로 시작하는 상태 코드는 클라이언트 쪽 오류를 나타내게 된다.(URL에 오타가 생길 때 '404 NOT FOUND' 상태 코드가 발생하는 것이 아주 일반적).

'5'로 시작하는 상태 코드는 서버 쪽에서 문제가 발생했음을 의미하게 된다.

 

HTTP 응답 헤더

HTTP요청 헤더와 마찬가지로 응답 헤더 역시 키-값 쌍으로 중요한 정보를 표기하게 된다. 예를 들면 언어 같은 것들이 포함된다.

 

HTTP 응답 본문

일반적으로 HTTP요청에 대한 결과값이 담기게 된다. 예를 들어 주간 영화 인기 순위를 “GET”요청하게 되면 해당 영화의 리스트가 HTTP응답 본문에 담겨 나오게 되는 식이다.

 

 

Reference

  1. https://www.cloudflare.com/ko-kr/learning/ddos/glossary/hypertext-transfer-protocol-http/
  2. http://www.kocw.net/home/enrolment/enrolmentView.do?cid=6166c077e545b736&lid=29ce4a298405bf3b