-
HTML 문서, 이미지, 텍스트를 가져올 수 있는 프로토콜. 웹에서 이루어지는 모든 데이터 교환의 기초다. 브라우저인 클라이언트에서 보내는 메시지는 요청, 서버에서 응답하는 메시지를 응답이라 부른다.
HTTP, TCP
클라이언트와 서버서 HTTP 요청, 응답을 교환하기 위해선 TCP 연결을 설정해야한다. 브라우저로 http://google.com 를 요청 할 때 HTTP 처리 순서는 아래와 같다.
- 브라우저는 DNS로부터 호스트 주소, google.com 대한 IP 주소를 가져온다
- 브라우저는 IP 주소와 Port에 대해서 TCP 연결을 형성한다
- 브라우저는 TCP 연결로 서버에게 HTTP 요청을 보낸다
- 브라우저는 TCP 연결로 서버로부터 HTTP 응답을 받는다
- 응답이 완료되면 TCP 연결을 종료한다.
HTTP로 주고 받는 데이터는 TCP 세그먼트의 형태로 전송된다. TCP는 데이터의 흐름을 받고 세그먼트 단위로 자른뒤 IP 패킷에 담아 인터넷에 보낸다. 이 작업은 모두 TCP/IP 소프트웨어에 의해서 처리되고 응용프로그램영역 개발자는 관여하지 않는다.
버전별 TCP 연결 차이
HTTP/1.0 에서는 각 요청/응답 별로 별도의 TCP 연결을 열었다. 그러나 여러 요청을 동시에 보내는 경우 이런 방식은 단일의 TCP 연결을 공유하는 것에 비해서 효율적이지 못하다. HTTP/1.1 에서는 파이프라이닝 개념과 지속적인 연결의 개념을 도입했다. 매번 새로운 TCP 연결을 형성하는 것이 아니라 기존에 있던 TCP 연결을 지속적으로 사용하는 방식이다. 기본적인 TCP 연결은 Connection 헤더를 사용해 부분적으로 제어된다. HTTP/2 부터는 단일 연결 상에서 메시지를 다중 전송(multiplex)하는 것으로 바꿨다.
메시지
- Method: 클라이언트가 수행하고자 하는 동작을 정의한다. GET, POST 가 해당한다
- Path: 가져오려는 리소스의 경로다. /main 이런 상대 주소를 의미하기도 한다
- Version: HTTP 프로토콜의 버전이다. 1.0, 1.1, 2.0이 있다
- Header: 서버에 대한 선택적인 추가정보에 해당한다.
- 상태코드: 요청의 성공 여부와 이유를 나타낸다. 200, 정상, 400이면 클라이언트 에러, 500은 서버 에러, 300은 리다이렉션 처리
- Header: 응답에 대한 선택적인 정보.
'개발 > 기술' 카테고리의 다른 글
single threaded vs multi threaded (0) 2023.03.16 HTTP 2.0 주요사항 (0) 2023.03.01 HTTPS, TLS, SSL (0) 2023.02.28 JAVA - 다중상속을 허용하지 않는 이유는 뭘까? (0) 2023.02.24 Kubernetes Object (0) 2022.02.22