Text, 이미지, HTML, JSON 등의 다양한 형태의 데이터를 전송할 때 HTTP 프로토콜을 사용한다.
HTTP/1.1 (TCP)를 사용한다. HTTP/2, HTTP3이 있다. 💡 HTTP 진화과정 및 버전별 차이 추후 정리하고 올릴 예정
❗
클라이언트 ➡︎ 서버뿐만 아니라서버 ➡︎ 클라이언트응답에도 사용되며,서버 ⮂ 서버통신에도 사용된다.

1. 클라이언트는 요청을 보내고, 응답을 기다린다
2. 서버는 요청에 대한 처리를 수행 후 결과를 응답한다.
HTTP는 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되었다. 따라서, 서버에서는 다수의 클라이언트와 상태나 연결을 계속 유지하기 위해서는 많은 리소스가 필요하다.
초기에는 클라이언트와 서버가 구분되지 않았다.
클라이언트는 보통 UI에 중점을 두도록 만들었고, 서버는 데이터, 비지니스 로직을 담당하도록 만들었다. ➡︎ 결과적으로, 클라이언트와 서버가 각자 독립적으로 발전하게 되었다.
- Scale Out 수평 확장성이 높다.
- 갑자기 요청량이 증가하여도 서버를 증설 하기 쉽다.
위와 같은 이유로 보통 무상태를 유지하여 서버를 구축한다. 다만, 로그인과 같이 상태를 유지해야 하는 경우가 반드시 생긴다. ➡︎ Cookie, Session, Token을 활용해 해결한다. (추후 링크 추가 예정)
HTTP는 연결을 유지하지 않는 모델이다. 따라서, 서버 자원을 효율적으로 사용할 수 있는 장점이 있다.
다만, 요청이 추가적으로 오게되면 3 way handshake를 해야하기 때문에 응답 시간이 증가한다. ➡︎ 캐시, 브라우저 캐싱을 통해 해결 가능하다. (추후 링크 추가 예정)
💡 현재는 HTTP 지속연결로 문제를 해결한다.
HTTP 지속연결이란 ➡︎하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지하는 것을 말한다.
❗연결을 한번만 맺고 끊기 때문에, Connectionless보다 연결횟수도 적고 응답 속도도 빠르다.