Network

HTTP(HyperText Transfer Protocol)

Reife 2023. 2. 16.

 

 

HTTP는 웹 상에서 HTML 문서와 같은 텍스트 기반 리소스를 교환할 때 사용하는 프로토콜이다.

그러나 지금은 HTML뿐만 아니라 음성, 이미지, 비디오, 파일 등 거의 모든 형태의 데이터를 해당 프로토콜로 전송한다.

클라이언트-서버 통신, 서버간 통신 모두 이 프로토콜을 사용한다.

 

서버간 연결에 TCP가 사용되기도 하는데, 이는 주로 게임 서버 등 특수한 분야에서 사용된다.

 

1991년에 나온 HTTP/0.9는 GET 메서드만 지원하고, HTTP 헤더가 포함되어 있지 않았다.

HTTP/1.0을 거쳐 1997년에 나온 HTTP/1.1은 현재 쓰고 있는 프로토콜의 대부분을 도입한 버전이어서, 가장 중요한 버전이라고 할 수 있다.

 

이후 HTTP/1.1의 성능이 개선된 버전 HTTP/2가 개발됐고, TCP 대신 UDP를 사용하고, 성능 개선을 특징으로 갖는 HTTP/3가 현재 개발 중에 있다.

 

웹을 공부하고 있다면 HTTP/1.1 버전을 기준으로 공부해야 한다.

 


 

HTTP의 특징

 

클라이언트-서버 구조

클라이언트와 서버는 개별적인 메시지 교환을 통해 통신한다. 이때 클라이언트가 보내는 메시지를 요청(requests), 서버가 응답하는 메시지를 응답(responses)이라고 한다.

 

요청은 일반적으로 브라우저가 사용자 에이전트로서 보내지만, 검색 엔진 인덱스를 구축하기 위해 웹을 돌아다니는 검색로봇도 사용자 에이전트에 해당된다.

 

요청과 응답 사이에는 여러 매개체가 존재하는데, 게이트웨이 또는 캐시 역할을 하는 프록시 서버 등이 있다.

 

 

 

무상태(Stateless)

무상태란 서버가 클라이언트의 상태를 보존하지 않는 것을 의미한다.

반대로, 서버와 클라이언트가 소통하면서 그것을 기록해놓고, 필요할 때 활용하는 것을 상태유지(stateful)라 한다.

실무에서는 로그인 기능과 같이 상태유지가 필요한 경우를 제외하고, 되도록 무상태를 사용한다.

 

장점

서버를 확장하는 스케일 아웃(scale-out)이 용이하다. 

통신 과정에서 서버가 바뀌어도 필요한 모든 데이터를 받기 때문에 문제가 없다.

 

단점

클라이언트가 해당 통신에 필요한 정보를 한꺼번에 보내야 한다.

 

 

비 연결성(Connectionless)

비 연결성은 TCP/IP 연결을 통해 클라이언트-서버 통신이 발생하면, 다시 TCP/IP 연결을 끊는 HTTP의 특성을 의미한다. 응답과 요청이 지속하면 비 연결성이 불리할 수 있지만, 클라이언트가 간헐적으로 요청하는 것이 일반적이기 때문에, 필요할 때만 연결함으로써 서버 자원을 효율적으로 운용할 수 있다.

 

TCP/IP 연결을 매번 한다는 것은 3 Way Handshake 시간이 반복적으로 소요되는 것을 의미한다. 최근에는 이러한 한계점을 HTTP 지속 연결(HTTP Persistent Connections)을 통해 보완하고 있다. 또한, HTTP/2와 HTTP/3에서 최적화 되었다. 

 

 

 


 

 

References

인프런 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한
mdn HTTP 안내서

 

 

'Network' 카테고리의 다른 글

HTTP 메서드  (0) 2023.02.16
HTTP 메시지  (0) 2023.02.16
프록시(Proxy) & 게이트웨이(Gateway)  (0) 2023.02.16
URI(Uniform Resource Identifier)  (0) 2023.02.15
모두의 네트워크 구축하기 1장 네트워크 첫걸음  (0) 2023.02.14

댓글