2대의 컴퓨터가 인터넷으로 연결되어 있고 웹을 통해 정보를 교환한다고 가정해보자. 한 컴퓨터에는 **웹 브라우저(Web browser)**가 설치되어 있고, 나머지 한대에는 **웹 서버(Web server)**가 설치되어 있다. 웹 서버 컴퓨터는 주소를 가지고 있으며 그 컴퓨터 안에는 index.html
이라는 파일이 저장되어 있다.
이때 웹 브라우저 주소창에 웹 서버 컴퓨터의 주소를 입력하면 어떤 일이 벌어질까? 웹 브라우저 컴퓨터는 웹 서버 컴퓨터에 신호를 보내서 index.html
파일을 요청하고, 웹 서버 컴퓨터는 가지고 있는 해당 파일의 정보를 웹 브라우저 컴퓨터로 보내 브라우저 화면에 index.html
페이지를 띄워준다.
여기서 웹 브라우저 컴퓨터를 **클라이언트(Client)**라고 부르고 웹 서버가 설치된 컴퓨터를 **서버(Server)**라고 부른다. 전 세계 웹 브라우저와 서버는 HTTP를 통해 대화한다. 1989년 팀 버너스 리(Tim Berners Lee)에 의하여 처음 설계된 HTTP(HyperText Transfer Protocol)는 HTML과 같은 하이퍼미디어 문서를 전송하기 위해 사용되는 통신규약이다.
HTTP는 HTML 문서나 이미지 파일과 같은 리소스를 가져오기 위해 사용하므로 일반적으로 HTTP 요청은 웹 브라우저에 의해 시작된다. 웹 브라우저는 텍스트, 이미지, 비디오 등과 같이 여러 리소스를 완전한 문서로 재구성한다. 예를 들어, HTML 문서를 한 번의 트랜잭션으로 가져온 뒤 첨부된 이미지와 그래픽 조각 등을 가져오기 위해 추가로 HTTP 트랜잭션을 수행한다.
HTTP 트랜잭션은 요청 명령과 응답 결과로 구성된다. 이 상호작용은 HTTP 메시지를 통해 이루어진다.
HTTP 메시지는 단순한 줄 단위의 문자열이다. HTTP는 초기 버전의 단순한 외형을 유지하면서 확장성 있게 진화해왔다. 초기 HTTP는 파일 요청 문제가 발생했을 때 사람이 해결할 수 있도록 파일 내부에 문제에 대한 설명과 함께 되돌아오기도 했다(HTTP/0.9). 이처럼 HTTP 메시지는 사람이 읽고 쓰기 쉽다는 특징이 있다.
HTTP의 버전은 여러 가지가 있지만, 그중 표준화된 프로토콜인 HTTP/1.1과 HTTP/2.0의 특징은 다음과 같다.
HTTP/1.1
요청과 응답이 순차적으로 이루어진다. 이에 따라 요청문서 내에 포함된 많은 양의 리소스를 처리하려면 요청할 리소스의 개수에 비례하여 대기시간이 길어질 수 있다. 예를 들어, 한 웹 페이지에 여러 아이콘 이미지가 있다면 그 개수만큼 파일 요청을 하게 된다.
HTTP/2.0
2022년 5월 기준으로 모든 웹사이트의 46.4%가 HTTP/2.0 버전을 사용하고 있다. HTTP/2.0은 HTTP/1.1과 완전히 다른 HTTP가 아니라 속도 향상이라는 목적에 맞춰 개선된 버전이다. 응답은 요청 순서에 상관없이 이루어지고 HTTP 메시지를 압축하여 전송한다.
HTTP 요청 메시지 예시
요청 메시지는 다음과 같이 구성된다. 위 사진은 Wireshark라는 프로그램을 통해 google.com(172.217.161.238)에 접속했을 때 전달되는 HTTP 요청 메시지를 확인한 것이다.
HTTP 요청 메서드
클라이언트가 서버에게 리소스에 대해 수행해주길 바라는 동작이다. 즉, 클라이언트가 웹 서버에 요청하는 목적과 그 종류를 알리는 수단이 HTTP 요청 메서드다. ‘GET’, ‘POST’와 같이 한 단어로 되어 있다.
메서드 종류 | 설명 |
---|---|
GET | 리소스 취득을 목적으로 클라이언트가 서버에게 URL에 해당하는 자료의 전송을 요청한다. |
POST | 서버에 데이터를 보내기 위해 사용한다. 주로 HTML 폼(Form)을 지원하기 위해 사용된다. 채워진 폼에 담긴 데이터는 서버로 전송되며, 서버는 이를 모아서 필요로 하는 곳에 보낸다. |
PUT | GET 메서드가 서버로부터 문서를 읽어 들이는 데 반해 PUT 메서드는 서버에 문서를 생성 또는 교체한다**.** 서버는 요청 메시지의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나, 이미 URL이 존재한다면 메시지의 본문으로 교체한다. |
PATCH | 리소스의 일부분을 수정할 때 사용된다. PUT 메서드는 문서 전체의 완전한 교체만을 허용하는 반면, PATCH 메서드는 수정하고 싶은 부분만 수정할 수 있다. |
DELETE | 클라이언트가 서버에게 URL로 지정한 리소스를 삭제해줄 것을 요청한다. |
경로(Path)
요청 대상이 되는 리소스의 경로를 의미한다. 가져오려는 리소스의 경로는 프로토콜(http://), 도메인(developer.mozilla.org), 또는 TCP 포트(80)인 요소들을 제거한 리소스의 URL이다.