2024. 1. 15. 03:40ㆍBackend/Internet
HTTP 란 무엇인가
Http란 클라이언트와 서버 사이의 통신을 규격화하기 위한 TCP/IP 기반의 프로토콜이다.
주로 클라이언트(웹 브라우저) 가 서버(웹 서버)와 요청, 응답을 주고받는 데 사용된다.
HTTP 기반 시스템의 구성 요소
표면적으로는 클라이언트의 요청이 서버에 전송되면, 서버는 그것을 처리하여 응답을 주는 구조이다.
내부를 살펴보면, 클라이언트와 서버 사이에는 프록시와 같은 다양한 구성요소들이 존재한다.
또한 HTTP 가 프로토콜 계층 중 application layer에 존재하기 때문에 대부분의 네트워크 처리 정보, 장애 등은 라우터나 모뎀 등이 처리하게 되어 그 영향도를 줄인다.
Client
클라이언트는 user-agent 이다.
user-agent 는 유저의 입장에서 작동하는 모든 도구들을 의미한다.
개발자의 디버그 툴도 그 중 하나이지만, 가장 대표적으로 user-agent 로 동작하는 것은 웹 브라우저(web browser)이다.
웹 페이지를 보여주기 위해, 브라우저는 HTML 문서를 요청한다.
그리고 그 파일을 파싱하고, 스크립트, CSS, 이미지나 비미오 등 페이지에 포함된 요소들도 요청한다.
브라우저는 그것들을 조합하여 웹 페이지를 만들어낸다.
로딩된 스크립트는 페이지 이동이나 페이지 변경 등의 동작을 즉시 수행할 수 있도록 동작한다.
Web Server
서버는 클라이언트와 반대편에 있는 구성요소로, 클라이언트에게 요청받은 문서를 제공하는 역할을 한다.
클라이언트의 반대편에 있다는 의미로 한 대의 기계(컴퓨터)로 인식될 수 있지만, 로드 밸런싱, 캐싱, 데이터베이스, e-commerce 등의 기능을 하는 여러 개의 서버가 조합되어 있는 형태에서 요청받은 문서를 처리해줄 수도 있다.
Proxy
사실 웹 브라우저와 서버 사이에는 HTTP 통신을 매개하기 위한 수많은 장치들이 있다.
웹 통신은 계층형 구조로 되어있기 때문에 물리적 레벨에서도 많은 처리가 일어나 HTTP 통신을 톱는다.
Application 계층에서 그 역할을 하는 것이 프록시이다. 프록시는 클라이언트와 서버 사이의 요청, 응답을 다양한 기능을 사용하여 매개한다.
- 캐싱 (Caching) : 데이터를 임시 보관
- 필터링 (Filtering) : 바이러스 검사나 계층 제어
- 로드 밸런싱 (Load balancing) : 여러 개 요청에 대한 분기 처리
- 인증 (Authentication) : 자원별 접근 권한 제어
- 로깅 (Logging) : 기록성 정보의 저장
HTTP 의 특징
- 간단하다 : http 2.0 으로 넘어오면서 부가적인 요소가 추가되기는 하였지만, 설계 자체를 사람이 읽을 수 있는 간단한 메시지 형식을 채택하였다.
- 확장 가능하다 : 헤더에 정보를 추가하는 방식으로 클라이언트와 서버 사이의 통신을 구체화하기 편리하다.
- Stateless 하지만, Sessionless 하진 않다
- Stateless : 연속된 두 요청 사이에 같은 커넥션을 공유하지 않는다.
- Not Sessionless : HTTP 쿠키를 헤더에 포함함으로써 세션 자체가 stateful 해진다. 결과적으로 여러 요청 사이에 상태를 공유할 수 있다.
- HTTP 는 메시지 손실을 방지하는 connection-based 를 지향하므로, UDP 프로토콜보다는 TCP 프로토콜에 의존한다.
HTTP 가 제어하는 것들
- 캐싱 (Caching) : 서버는 프록시와 클라이언트에게 캐싱할 데이터와 지속시간을 지정할 수 있고, 클라이언트는 프록시에 저장 제외할 데이터를 지정할 수 있다.
- 출처 제한 완화 : 스누핑 등 보안 공격을 방어하기 위해, 출처가 동일한(same-origin) 페이지만 호출할 수 있도록 지정 가능하다.
- 인증 (Authentication) : authentication 헤더를 통해 특정 리소스에 접근하는 권한을 제어한다.
- 프록시 (Proxy), 터널링 (Tunneling) : 서버나 클라이언트가 인트라넷에 위치해 있어 자신의 IP를 감출 필요가 있는 경우, 방화벽을 넘어 프록시 서버를 통하게 할 수 있다.
- 세션 (Session) : HTTP 는 stateless 한 프로토콜이지만 쿠키를 활용함으로서 세션을 형성해, 유저에게는 연결이 유지된 것 같은 인식을 줄 수 있다.
HTTP 요청, 응답
Http 버전이 올라감에 따라 다소간 변화가 있었으나, 기본적인 요청 응답 형태는 아래와 같다.
Request
GET /index HTTP/1.1
Host: gigyesik.com
Accept-Language: En
- GET : 메서드 이름. 요청의 형식을 분류한다.
- /index : 요청할 페이지의 경로
- HTTP/1.1 : HTTP 프로토콜 버전
- 그 밖의 Host, Language 정보를 표시하는 헤더
- POST 메서드 등은 요청과 함께 보낼 데이터를 body에 포함하여 보내기도 한다.
Response
HTTP/1.1 200 OK
Date: Sun, 14 Jan 2024 03:33:19 GMT
Content-Length: 13
- 200 : 응답의 status code. 200을 성공으로 정의하고 있다.
- OK : status message.
- 기타 프로토콜 버전과 헤더를 포함한다.
그 밖에 알면 좋을 용어들
요약
HTTP 프로토콜은 확장성 있고 사용하기 편한 클라이언트-서버 기반 통신의 프로토콜이다.
마치며
개괄적인 부분만 보는게 현재로서는 도움이 된다.
좀더 짧게 보아도 당장은 괜찮을 것 같다.
Resources
'Backend > Internet' 카테고리의 다른 글
호스팅이란 무엇인가 (1) | 2024.01.22 |
---|---|
도메인 이름은 무엇인가 (1) | 2024.01.22 |
DNS는 어떻게 동작하는가 (0) | 2024.01.22 |
브라우저는 어떻게 동작하는가 (0) | 2024.01.18 |
인터넷은 어떻게 동작하는가 (1) | 2024.01.11 |