[WEB] HTTP 개요
HTTP(HyperText Transfer Protocol)
인터넷상에서 정보를 주고받을 수 있는 프로토콜로 주로 HTML 문서를 주고받는데 쓰였다.
현재 HTML 뿐만 아니라
이미지, 음성, 영상, 파일, JSON, XML... 거의 모든 형태의 데이터를 전송 가능하다. 웹서비스의 경우
브라우저(클라이언트)에서 서버로의 데이터 전송때 사용되고 서버간의 데이터를 주고 받을때도 HTTP 프로토콜을 사용한다.
현재 대부분의 서비스에서 HTTP 프로토콜을 사용한다.
HTTP의 특성에 대해 알아보자
HTTP 버전
- HTTP/1.1(1997년) : TCP기반으로 현재 가장 많이 사용되고 있는 버전이다.
- HTTP/2(2015년) : 여러 파일을 한번에 병렬 전송을 하는 식으로 로딩 시간을 줄이는 방법을 사용한다
- HTTP/3 : HTTP/2의 차기버전으로 개발중이며 HTTP/1, 2와 달리 UDP프로토콜기반으로 통신한다.
무상태(Stateless) 프로토콜
무상태란 서버가 클라이언트의 상태를 보존하지 않는것을 의미한다. 즉 클라이언트에서 서버로 데이터 전송 시
전송한 데이터가 다른요청때 유지되지 않는다.
그렇기에 요청때마다 데이터를 한번에 모두 전송해야 원하는 처리가 가능하다.
이런 특성의 장점은 서버 확장이 용이 한점에 있는데 만일 상태가 유지된다고 한다면 서버1과 통신하다가 서버2가 증설되어
서버2와 통신하면 서버1에서 유지되던 정보가 없기 때문에 문제가 발생한다.
하지만 무상태일 경우 서버가 증설되도 클라이언트에서 데이터를 한번에 보내주기 때문에 문제가 야기되지 않는다.
로그인 정보와 같이 상태유지가 필요한 데이터는 세션과 쿠키를 활용하여 유지한다.
비연결성
HTTP는 연결을 유지하지 않은 특성이있다.
즉 클라이언트가 서버로 연결을 하고 처리를 끝낸후 연결을 끊고 유지하지않는다.
수많은 요청이 들어와도 초 이하의 속도로 응답하기 때문에 연결을 유지하는것 보다 서버 자원을 효율적으로 사용할 수 있다.
하지만 TCP/IP연결을 새로 맺어야 하기 때문에 3 way handshake시간이 추가되고 HTML파일 뿐 아니라 css, javaScript파일, 이미지등 도 동시에 요청하기 때문에 큰 비용이 발생한다.
이런 비용을 보완하기 위해 HTTP는 HTTP 지속 연결(Persistent Connections)을 사용한다.
HTTP 지속 연결은 다운로드가 필요한 항목들을 연결을 종료하지 않고 모두 다운로드 후 종료하는 방식을 말한다.
HTTP 메시지
HTTP 요청 시 HTTP 요청메세지를 전송하고 응답에는 HTTP 응답 메세지가 전송된다.
각 HTTP메시지에는 다양한 정보가 담겨져있다.
HTTP 요청 메세지
- 시작라인(요청) : HTTP method request-target(Path) HTTP-version
- HTTP 메서드 : GET
- 요청대상 (/search?q=hello) : 대부분 절대경로로 시작한다.
- HTTP version : HTTP/1.1
HTTP 응답 메세지
- 시작라인(응답) : HTTP-version status-code 이유문구
- HTTP 버전 : HTTP/1.1
- HTTP 상태코드 : 요청의 결과를 나타냄
- 이유문구 : 사람이 이해할 수 있는 짧은 상태코드 설명
HTTP 헤더
HTTP 전송에 필요한 모든 부가정보가 포함된다.
예) 메세지 바디 내용, 메시지크기, 압축정보, 요청 클라이언트, 서버 AP정보, 캐시정보...가 존재한다.
뿐만 아니라 필요시에 임의의 헤더 추가 가능하다.
HTTP 메세지 바디
실제 전송할 데이터가 있는 공간이다.
HTML 문서, 이미지, 영상, JSON 등등 byte로 표한할 수 있는 모든 데이터 전송이 가능하다.