CS

[네트워크] HTTP 프로토콜

may_wonhui 2023. 11. 8. 18:37

HTTP 통신?

 

인터넷에서 데이터를 주고받는 프로토콜이다.

웹 브라우저와 서버 간에 통신을 가능하게 해주는 규약을 의미한다.

 

HTTP는 클라이언트-서버 모델을 사용하여 요청-응답 프로세스를 통해 정보를 전송한다.

클라이언트는 HTTP 메시지를 생성하여 서버에 요청을 보내고, 서버는 해당 요청에 대한 응답을 보낸다.

이는 HTML 문서 뿐만 아니라 그림, 비디오, 오디오 파일 등 다양한 미디어 자원에 대한 요청과 응답에 사용된다.

 

 

 

요청(Request): 클라이언트(보통 웹 브라우저)가 서버에 정보를 요청하는 단계.

요청은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 함께 요청 URL, HTTP 버전, 헤더 정보, 그리고 필요한 경우 본문(Body)을 포함한다.

 

응답(Response): 서버는 클라이언트의 요청을 받아 처리한 후, 결과를 클라이언트에게 반환.

이 응답에는 HTTP 버전, 상태 코드(200, 404, 500 등), 헤더 정보, 그리고 요청한 자원이 본문(Body)에 포함된다.

 

 

 


HTTP 메서드?

  • GET: 서버에서 특정 리소스의 정보를 요청하는 데 사용한다. 
  • POST: 클라이언트에서 서버로 데이터를 전송하여 새로운 리소스를 생성하는 데 사용된다.
  • PUT: 클라이언트에서 서버로 데이터를 전송하여 기존 리소스를 업데이트하는 데 사용된다. 만약 해당 리소스가 존재하지 않는다면 새로운 리소스를 생성한다.
  • DELETE: 서버에서 특정 리소스를 삭제하는 데 사용한다.
  • HEAD: GET과 유사하나, 본문을 제외한 헤더 정보만 요청하는 데 사용된다. 리소스를 가져오지 않고 정보를 확인하는 데 사용된다.
  • PATCH: PUT과 유사하게 리소스를 업데이트하는 데 사용되지만, 전체 리소스가 아닌 일부만 변경하는 데 사용된다.

 

 


HTTP 헤더?

 

HTTP 헤더는 HTTP 요청이나 응답의 본문을 전송하기 전에 보내는 정보를 포함하고 있으며, 이름-값 쌍으로 구성되어 있다. 이를 통해 클라이언트와 서버는 요청이나 응답에 대한 상세 정보를 교환할 수 있다.

 

  • 일반 헤더: 클라이언트와 서버 모두에서 사용되며, 메시지 전반에 적용되는 헤더. 예를 들어, 'Date', 'Cache-Control', 'Connection' 등이 있다.
  • 요청 헤더: 클라이언트에서 서버로 요청을 보낼 때 사용되며, 요청에 대한 상세 정보를 제공한다. 예를 들어, 'User-Agent', 'Accept', 'Accept-Language' 등이 있다.
  • 응답 헤더: 서버에서 클라이언트로 응답을 보낼 때 사용되며, 응답에 대한 상세 정보를 제공한다. 예를 들어, 'Server', 'WWW-Authenticate' 등이 있다.
  • 엔티티 헤더: 요청이나 응답에 포함된 본문에 대한 상세 정보를 제공한다. 예를 들어, 'Content-Type', 'Content-Length', 'Last-Modified' 등이 있다.

 


HTTP 무상태성(stateless)?

 

HTTP의 무상태성(Stateless)은 클라이언트와 서버 간의 통신에서 서버가 클라이언트의 상태 정보를 저장하지 않는 특성을 의미한다.

 

이는 각 요청이 독립적으로 처리된다는 것을 의미하며, 이전 요청이 이후 요청에 영향을 주지 않는다.

그러나 세션 관리, 쿠키, 히든 필드 등의 기술을 통해 상태 정보를 유지할 수 있게 해준다.

 

장점)

 

이러한 무상태성은 HTTP의 간단하고 효율적인 설계를 가능하게 한다.

서버는 클라이언트 상태를 추적하거나 저장할 필요가 없으므로, 많은 수의 동시 연결을 처리할 수 있다.

또한, 각 요청이 독립적으로 처리되므로 요청 간에 의존성이 없어, 분산 시스템에서의 확장성이 증가합니다.

 

단점)

 

무상태성은 사용자별 맞춤형 서비스를 제공하는 데 어려움을 발생시킬 수 있다. 예를 들어, 사용자가 로그인한 상태를 유지하거나 쇼핑 카트에 상품을 추가하는 등의 상태 정보를 저장할 필요가 있는 경우가 있다. 이런 상황에서는 쿠키나 세션과 같은 기술을 사용하여 상태 정보를 유지하면서 사용자별 맞춤형 서비스를 제공할 수 있다.


HTTP Keep-Alive?

 

HTTP Keep-Alive, 또는 지속적인 연결(Persistent Connection)은 HTTP/1.1에서 도입된 메커니즘으로, 서버와 클라이언트 간의 TCP 연결을 유지하고 여러 HTTP 요청과 응답을 하나의 연결에서 처리할 수 있게 한다.

 

 

기본적으로 HTTP는 요청-응답 모델을 사용하는데, 이는 클라이언트가 요청을 보내면 서버가 응답을 반환하고 연결을 종료하는 방식이다. 그러나 이 방식은 매 요청마다 새로운 TCP 연결을 생성하고 종료해야 하므로, 네트워크 자원을 많이 사용하고 대기 시간이 증가하는 단점이 있다.

 

 

이를 개선하기 위해 HTTP/1.1에서는 Keep-Alive 메커니즘을 도입했다.

이 메커니즘을 사용하면 클라이언트와 서버는 처음 연결을 설정한 후에도 여러 번의 요청과 응답을 교환할 수 있다.

이렇게 하면 매 요청마다 연결을 생성하고 종료하는 오버헤드를 줄일 수 있으며, 웹 페이지 로딩 시간을 개선하고 네트워크 효율성을 증가시킨다.

 

 

Keep-Alive 연결은 클라이언트나 서버가 연결을 명시적으로 종료하거나, 일정 시간 동안 활동이 없는 경우에 종료된다. HTTP 헤더의 'Connection: keep-alive' 필드를 사용하여 Keep-Alive 연결을 설정할 수 있다.

 


HTTP 파이프라이닝?

 

HTTP 파이프라이닝은 HTTP/1.1에서 도입된 기능으로, 클라이언트가 여러 개의 요청을 연속적으로 보낼 수 있도록 하며, 서버의 응답을 기다리지 않고도 추가 요청을 전송할 수 있게 한다.

이 기능은 네트워크 대기 시간을 줄이고 효율성을 증가시키는 데 도움이 된다.

 

 

그러나 HTTP 파이프라이닝은 순서대로 응답을 보내야 하는 특징 때문에 복잡한 문제를 일으킬 수 있다.

예를 들어, 첫 번째 요청 처리에 시간이 오래 걸릴 경우, 뒤이어 오는 요청들이 지연되는 '헤드 오브 라인 블로킹(Head-of-Line Blocking)' 문제가 발생할 수 있다.

 

 

또한, 모든 클라이언트와 서버가 정확하게 파이프라이닝을 구현하거나 지원하지 않기 때문에, 실제 사용에서는 이론적인 이점이 제대로 나타나지 않을 수 있다.

이런 이유로 HTTP 파이프라이닝은 실제로 잘 사용되지 않으며, 대신 HTTP/2에서는 다중화(Multiplexing) 기능을 사용하여 여러 요청과 응답을 동시에 처리하는 방식을 채택하고 있다.

 

 

+) 다중화 기능

 

클라이언트와 서버는 하나의 TCP 연결에서 여러 개의 '스트림'을 생성하고, 각 스트림에서 독립적으로 요청과 응답을 주고받을 수 있다.

이를 통해 네트워크 효율성이 향상되고, 웹 페이지의 로딩 시간이 단축되는 등의 이점을 얻을 수 있다.

 


HTTP 버전?

  • HTTP/1.1
    • 1997년에 발표된 이 버전은 HTTP/1.0의 단점을 개선하고, 웹 사용의 확장성을 높이기 위해 설계되었다.
    • 주요 특징으로는 Keep-Alive 연결, 파이프라이닝, 청크 전송 등이 있다.
    • 그러나, 헤드 오브 라인 블로킹 문제와 같은 단점도 있다.
  • HTTP/2
    • 2015년에 발표된 이 버전은 HTTP/1.1의 성능 문제를 개선하기 위해 설계되었다.
    • 주요 특징으로는 다중화(Multiplexing), 서버 푸시, 헤더 압축 등이 있다.
    • 이를 통해 네트워크 효율성과 속도를 크게 향상시켰다.
  • HTTP/3
    • 아직 공식 표준화는 이루어지지 않았지만, 주요 특징으로는 기존 TCP 대신 UDP 기반의 QUIC 프로토콜을 사용하는 것이 있다.
    • 이를 통해 네트워크 지연 시간을 더욱 줄이고, 헤드 오브 라인 블로킹 문제를 개선하였다.
    • 또한, 연결 설정 시간을 줄이고, 패킷 손실에 대한 복구를 개선하는 등의 특징이 있다.

 

 

 

 

 

 

'CS' 카테고리의 다른 글

[네트워크] IP 프로토콜  (2) 2023.11.29
[네트워크] TCP  (2) 2023.11.22
[네트워크] DNS, UDP  (0) 2023.11.15
[네트워크] HTTPS  (0) 2023.11.13
[네트워크] 컴퓨터 네트워크와 네트워크 레이어  (0) 2023.11.08