일단 http에 대해 간략하게 정리 먼저 해보자면,
: hypertext 를 전송하는 프로토콜이나, 이제는 hypertext뿐 아니라 모든 형태의 데이터 전송 가능
: 서버 간 데이터 주고 받을 때도 http 사용하며, http/1.1이 가장 많이 사용됨 (TCP: http/1.1, or http/2)
: http/2, http/3은 업그레이드 버전으로 최근 사용량 증가 (UDP는 http/3을 주로 사용)
: request-response, 클라이언트-서버로 분리되어 있다는 것이 중요한 point!
(클라이언트-서버로 분리되어 단순하고 각각 side의 확장 가능 -> 다양하고 복잡한 비즈니스 로직 구현 가능)
특히 http에서 굉장히 중요한 특징은, 'stateless'한 상태를 지향한다는 것.
얼핏 보면 stateful이 더 좋은 형태의 프로토콜 같지만, 반대다.
stateful의 문제
1) 클라이언트 - 서버 간에 지속적으로 관계가 유지되어야 함
2) 그래서 결국 서버를 무한대로 늘려야 하는 문제가 발생할 수 있음
stateless의 특징
1) 클라이언트는 반드시 동일한 서버와 지속적인 관계를 유지할 필요가 없음
2) 즉 아무 서버나 호출 가능하단 뜻
3) 그렇다고 단점이 없는 것은 아니다. 계속 모든 정보를 서버에 보내줘야 하고, '로그인' 과 같이 모든 것을 stateless 구조로 설계할 수 없음
결론은 stateful은 최소한으로 유지하고, stateless를 지향하는 것이 좋다는 것.
그래서 결국 http는 클라이언트-서버 연결을 유지하지 않고 서버를 매우 효율적으로 사용하는 특징을 갖는다.
그러나 이것 또한 무결한 것은 아니기에,
(아무리 짧은 시간이라 해도, 데이터 전송할 때마다 3 way handshake를 거쳐야 하고 html/css/js 등 모든 데이터들을 그때그때 다운로드 받아야 한다)
- start line
: request line / status line으로 구성
: get(리소스 조회), post(요청 내용 처리), put, delete 등 서버가 수행해야 할 동작 지정
: 상태 코드 (200, 400(클라이언트 요청 오류), 500(서버 내부 오류)...)- header
: http 전송에 따른 부가 정보 (메타 정보/ content-type, content-length...)- message body
: byte로 표현할 수 있는 모든 데이터
내용 출처: 모든 개발자를 위한 HTTP웹 기본 지식, 김영한