본문 바로가기

CS/네트워크

HTTP

HTTP(Hyper Text Transfer Protocol)란 브라우저와 서버가 통신할 수 있도록 만들어주는 여러 프로토콜 중 하나로 인터넷에서 웹 브라우저웹 서버 사이에 HTML 문서(데이터)를 주고받는데 쓰이는 통신 프로토콜이다.

일반적으로 전송 계층 프로토콜로 TCP를 사용하고, 네트워크 계층 프로토콜로는 IP를 사용한다. TCP/IP에서는 IP 주소를 사용해서 통신할 컴퓨터를 결정하고, 포트 번호를 사용해서 해당 컴퓨터의 어떤 프로그램과 통신할지를 결정한다. (HTTP에서는 기본적으로 80번 포트를 사용한다.)

HTTP의 특성

1. 비연결성(Connectionless)

클라이언트와 서버가 한 번 연결을 맺은 후 클라이언트의 요청에 대해 서버가 응답을 마치면 연결을 끊는다. 

 

왜 HTTP 프로토콜은 한 번 맺은 연결을 끊을까?

서버는 다수의 클라이언트와 연결 지속 시 많은 리소스가 발생하게 된다. 따라서 서버가 응답을 마친 후 연결을 끊어 연결 유지를 위한 리소스를 줄이고 더 많은 연결을 할 수 있게 한다.

 

하지만 서버가 클라이언트를 기억하지 못해 모든 요청에 대해 매번 새로운 연결을 해야 하는 일이 발생한다. 이렇게 되면 연결 해제에 대한 오버헤드가 많이 발생하게 되는데, 이를 해결하기 위해 Keep Alive를 사용한다. 클라이언트와 서버 사이 상대방의 안부를 묻기 위해 packet을 주기적으로 보낸다. 만약 packet에 대해 반응이 없으면 접속도 끊는다. 이 방법 역시 주기적으로 패킷을 보내며 확인해야 하기 때문에 서버가 바쁜 상황에서도 process 수가 늘어나고 keep alive를 유지하기 위한 메모리가 많아져 주의해야 한다.

 

 

2. 무상태 프로토콜(Stateless protocol)

HTTP의 비연결성 특성으로 인해 서버가 두 요청 간의 어떠한 데이터도 유지하지 않는다. 따라서, 서버는 클라이언트를 식별하지 못한다.

그래서 쿠키(브라우저에 상태 저장)와 세션(서버에 상태 저장)을 사용한다.

하지만 이 방법들은 데이터를 안전하게 저장하지 않아 데이터를 안전하게 보호해야 하는 경우에는 토큰을 사용해야 한다.

HTTP의 흐름

  1. TCP 연결. TCP 연결은 요청을 보내거나 받는데 사용한다. 새 연결 또는 기존 연결을 재사용할 수 있다.
  2. HTTP 메시지 전송
  3. 서버가 보낸 응답을 읽는다.
  4. 연결을 닫거나 다른 요청을 위해 재사용한다.

HTTP 요청 메서드

클라이언트에서 서버가 수행하기 원하는 동작을 보낸다.

  • GET : 주로 데이터를 가져올 때 사용
  • POST : 데이터를 입력할 때 사용
  • PUT : 데이터 수정 및 생성
  • PATCH : 데이터 수정
  • DELETE : 데이터 삭제

'CS > 네트워크' 카테고리의 다른 글

HTTP와 HTTPS  (0) 2022.09.16
GET과 POST의 차이  (0) 2022.09.15
TCP와 UDP  (0) 2022.09.09
TCP 3-way handshake & 4-way handshake  (0) 2022.09.06
OSI 7계층  (0) 2022.09.04