HTTP
HTTP는 우리가 보는 웹 페이지가 어떻게 구조화되어 있는지 브라우저로 하여금 알 수 있게 하는 마크업 언어이다.
사람들끼리도 소통을 할 때 서로 이해할 수 있는 언어로 상대방에게 전달해야 하듯
컴퓨터끼리도 서로 전달하는 메기지에 규칙이 있다.
HTTP는 클라이언트와 서버가 리소스를 주고받기 위해 규칙이 있는 메시지를 말한다.
개념
웹은 기본적으로 HTML, URI, HTTP로 구성된다.
HTTP는 클라리언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다.
프로토콜은 컴퓨터, 통신장비들 간의 원활한 소통을 위한 약속 또는 규칙이다.
즉, HTTP는 클라이언트와 서버가 메시지를 주고받기 위해 정해진 규칙을 의미한다.
HTTP의 탄생
HTTP는 WWW에 내재된 프로토콜로 팀 버니스 리 박사에 의해 1989년에 발명되었다.
WWW는 인터넷을 통해서 연결된 웹 피이지 시스템을 뜻한다.
CERN(유럽물리학연구소)의 팀 버너스 리 박사는 멀리 떨어져 있는 동료 연구자들과 정보를 공유하고자 WWW 시스템을 고안해냈다고 한다.
다양한 버전
HTTP버전은 HTTP/0.9~HTTP/3 등이 있다.
1991년에 처음으로 HTTP/0.9가 등장하였고 현재는 HTTP/1.1 버전을 가장 많이 사용한다.
이 외에도 HTTP/2, HTTP/3 버전이 있으며 최근에느 웹 페이지에서 2 버전과 3 버전도 같이 사용되고 있다.
특징
HTTP는 클라이언트의 요청과 서버의 응답 구조로 이루어져 있다.
가장 큰 특징은 클라이언트와 서버의 역할을 명확하게 구분한다는 점이다.
2대의 컴퓨터가 HTTP 통신을 하고 있다고 가정하면 반드시 한대는 클라이언트, 나머지 한대는 서버이어야 한다는 점이다.
만약 한 컴퓨터에서 클라이언트와 서버가 동시에 작동한다면 트래픽이 많아져 많은 오류를 겪는다. 또한 어느 한쪽에 문제가 발생하면 서로 영향을 주는 큰 결점이 있다.
(*트래픽이란 서버, 스위치 등 네트워크 장치에서 일정 시간 내에 흐르는 데이터의 양을 말한다.)
HTTP는 클라이언트와 서버가 명확하게 구분되어 있기 때문에 어느 한쪽에 문제가 발생해도 서로에게 영향을 주지 않는다.
문제를 독집적으로 해결할 수 있다는 것이다.
추가적으로 HTTP는 요청에 메시지가 발송되어만 서버에서 응답 메시지를 전송할 수 있는 특징을 가지고 있다.
무상태 프로토콜
무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않는다는 뜻이다.
HTTP의 중요한 특징중 하나이며 덕분에 서버는 다양하게 활용되며 폭넓은 확장성을 갖게 된다.
이는 서버의 CPU나 메모리에서 리소스의 소비를 절약하는 이점을 가져다준다.
단, 이전 상태 및 정보를 기록해야 하는 경우 쿠키와 세션 등을 활용해서 정보를 저장하는 경우는 있다.
지속 연결
HTTP 초기 버전에서는 요청/응답 통신을 주고받을 때마다 TCP/IP를 연결하고 종료하는 일을 반복적으로 진행했다.
이를 비연결성이라고 한다. 자원을 주고받을 때만 연결하기 때문에 서버에서는 최소한의 자원만 사용하므로 서버자원을 매우 효율적으로 사용할 수 있다.
하지만 이런 방식은 요청할 때마다 TCP/IP 연결을 새로 맺어야 하기 때문에 불필요한 시간이 발생한다는 단점이 있다.
요즘은 텍스트뿐만 아니라 mp3, mp4등 다양한 데이터 자원을 받아야 하기 때문에 비연결성을 사용하면 과부하가 발생한다.
그래서 HTTP/1.0부터 HTTP/1.1 이상의 버전은 지속 연결 방식을 고안하였다.
TCP/IP 연결을 계속 유지하는 방법이다.
이 방식 덕분에 서버 부하와 오버헤드가 줄어들어 처리 속도가 향상되었다.
지속 연결은 파이프 라인화(HTTP Pipelineing)를 가능하게 한다.
파이프 라인화란 동시에 여러 개의 요청을 수행하는 것이다.
과거에는 요청 메시지를 방신한 후에 응답 메시지를 수신할 때까지 다음 요청 메시지를 보낼 수 없었으나
파이프 라인화가 가능해지면서 응답 메시지를 기다릴 필요 없이 다음 요청 메시지를 보낼 수 있게 되었다.
HTTP 요청 메서드
HTTP에서 서버의 행동을 지정하는 명령어로 요청 메서드가 있다. 다른 말로 HTTP 동사라고 부르기도 한다.
요청 메서드에는 GET, POST, PUT, DELETE, PATCH 등이 있다.
이러한 메서드는 리소스 조회, 생성, 삭제, 요청 내역 처리 등에 활용된다.
HTTP 메시지
HTTP 메시지는 서버와 클라이언트가 서로 데이터 정보를 교환할 때 사용하는 형식과 같다.
요청 메시지와 응답 메시지 형식으로 나누어져 있다.
요청인지 응답인지에 따라 메시지 내용이 달라질 수 있지만 구조는 크게 변하지 않는다.
HTTP 상태 코드
코드 | 클래스 | 설명 |
1xx | Informational | 요청을 받아들여 처리 중 |
2xx | Success | 요청을 정상적으로 처리 |
3xx | Redirection | 요청을 완료하기 위해 추가 동작이 필요 |
4xx | Client Error | 서버는 요청 이해 불가 |
5xx | Server Error | 서버는 요청 처리 실패 |
HTTP의 약점
HTTP의 구조는 매우 단순하다.
요청이 들어오면 상대를 확인하지 않고 데이터 정보를 제공해 준다.
이 때문에 위장한 클라이언트가 이를 악용하는 사례도 종종 발생한다.
HTTP는 암호화가 되지 않았다는 것이 큰 약점이다.
이를 보완하고자 나온 것이 HTTPS이다.
HTTPS
HTTPS는 HTTP Secure의 약자로 HTTP에 암호화, 인증 등의 구조를 추가한 것이다.
그렇다고 새로운 프로토콜은 아니다.
HTTP의 데이터 통신 연결부인 소켓을 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security)라는 프로토콜로 대체한 것이다.
소켓이란
프로그램이 네트워크에서 데이터를 통신할 수 있도록 연결해 주는 연결부와 같다.
웹 브라우저에서 서버의 응답을 받기 위해 HTTP 요청 메시지를 생성했다고 가정을 해 보자.
이 데이터는 소켓 라이브러리를 통해 TCP/IP 계층으로 전달된다.
반대로 서버에서 응답 메시지를 전달할 때도 소켓이 있어야만 한다.
SSL과 TLS란
SSL은 보안 소켓 에이어이고 TLS는 전송 계층 보안이다.
SSL과 TLS는 컴퓨터 네트워크에 보안을 제공하기 위해 설계된 암호 규약으로 인증서라고도 불린다.
보통은 키를 교환하거나 대칭 키 암호로 암호화 메시지 인증 절차를 갖는다.