정의
HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 하다.
하나의 완전한 문서는 텍스트, 레이아웃 설명, 이미지, 비디오, 스크립트 등 불러온 하위 문서들로 재구성된다.
우리가 사용하는 웹 브라우저에서 인터넷 주소 맨 앞에 들어가는 http://가 이 프로토콜을 사용해서 정보를 교환하겠다는 표시이다.
(사실 // 부분은 치지 않아도 잘 작동한다... 팀 버너스리가 당시 멋으로 만든것이라고 한다 ㅋㅎㅋㅎㅋㅎ)
구조
HTTP는 요청(request)과 응답(response)으로 구성되어 있고, 클라이언트가 요청을 하면 서버가 응답을 하는 구조로 되어 있다.
'클라이언트가 웹 페이지에서 링크가 걸려있는 텍스트를 클릭(요청)하면 링크를 타고 새로운 페이지로 넘어간다(응답)'
HTTP는 FTP나 텔넷과는 다르게 비연결식이다.
FTP나 Telnet은 클라이언트가 서버에 정보를 요청해도 그 이후에 서버가 클라이언트와 연결을 끊지 않지만, HTTP는 클라이언트가 서버에 정보를 요청하면 응답 코드와 내용을 전송하고 클라이언트와 연결을 종료한다.
요청
GET /index.html HTTP/1.1 - 헤더
Host: namu.wiki - 호스트
- 공백 -
다음 요청 메시지는 namu.wiki의 index.html을 보여 달라는 요청이다.
HTTP 기반 시스템의 구성요소
요청은 사용자 에이전트(또는 그것을 대신하는 프록시)에 의해 전송된다.
대부분의 경우, 사용자 에이전트는 브라우저지만, 무엇이든 될 수 있다.
예를 들어, 검색 엔진 인덱스를 채워넣고 유지하기 위해 웹을 돌아다니는 로봇이 그러한 경우이다.
각각의 개별적인 요청들은 서버로 보내지며, 서버는 요청을 처리하고 response라고 불리는 응답을 제공한다.
이 요청과 응답 사이에는 여러 개체들이 있는데, 예를 들면 다양한 작업을 수행하는 게이트웨이 또는 캐시 역할을 하는 프록시 등이 있다.
실제로는 브라우저와 요청을 처리하는 서버 사이에는 좀 더 많은 컴퓨터들이 존재한다. (라우터, 모뎀 등)
웹의 계층적인 설계 덕분에, 이들은 네트워크와 전송 계층 내로 숨겨진다.
HTTP는 애플리케이션 계층의 최상위에 있다.
네트워크 문제를 진단하는 것도 중요하지만, 기본 레이어들은 HTTP의 명세와는 거의 관련이 없다.
클라이언트: 사용자 에이전트
사용자 에이전트는 사용자를 대신하여 동작하는 모든 도구이다. 이 역할은 주로 브라우저에 의해 수행된다.
브라우저는 항상 요청을 보내는 개체이다. 그것은 결코 서버가 될 수 없다.
웹 페이지를 표시하기 위해, 브라우저는 페이지의 HTML 문서를 가져오기 위한 요청을 전송한 뒤, 파일을 구문 분석하여 실행해야 할 스크립트 그리고 페이지 내 포함된 하위 리소스들(보통 이미지와 비디오)을 잘 표시하기 위한 레이아웃 정보(CSS)에 대응하는 추가적인 요청들을 가져온다. 그런 뒤에 브라우저는 완전한 문서인 웹 페이지를 표시하기 위해 그런 리소스들을 혼합한다.
브라우저에 의해 실행된 스크립트는 이후 단계에서 좀 더 많은 리소스들을 가져올 수 있으며 브라우저는 그에 따라 웹 페이지를 갱신하게 된다.
웹 페이지는 하이퍼텍스트 문자로, 표시된 텍스트의 일부는 사용자가 사용자 에이전트를 제어하고 웹을 돌아다닐 수 있도록 새로운 웹 페이지를 가져오기 위해 실행(보통 마우스 클릭에 의해) 될 수 있는 링크임을 뜻한다. 브라우저는 HTTP 요청 내에서 이런 지시 사항들을 변환하고 HTTP 응답을 해석하여 사용자에게 명확한 응답을 표시한다.
웹 서버
통신 채널의 반대편에는 클라이언트에 의한 요청에 대한 문서를 제공하는 서버가 존재한다.
서버는 사실상 논리적으로 단일 기계이다. 이는 로드(로드 밸런싱) 혹은 그때 그때 다른 컴퓨터(캐시, DB 서버, e-커머스 서버 등과 같은)들의 정보를 얻고 완전하게 혹은 부분적으로 문서를 생성하는 소프트웨어의 복잡한 부분을 공유하는 서버들의 집합일 수도 있기 때문이다.
서버는 반드시 단일 머신일 필요는 없지만, 여러 개의 서버를 동일한 머신 위에서 호스팅 할 수는 있다. HTTP/1.1과 Host 헤더를 이용하여, 동일한 IP 주소를 공유할 수도 있다.
프록시
프록시는 '대리'의 의미로, 내부 인터넷에서 인터넷 접속을 할 때에, 뻐른 엑세스나 안전한 통신등을 확보하기 위한 중계서버를 '프록시 서버'라고 한다. 클라이언트와 웹 서버의 중간에서 위치하고 있으며, 대신 통신을 받아주는 것이 프록시 서버이다.
웹 브라우저와 서버 사이에서는 수많은 컴퓨터와 머신이 HTTP 메시지를 이어 받고 전달한다.
프록시는 눈에 보이거나 그렇지 않을 수도 있으며(프록시를 통해 요청이 변경되거나 변경되지 않는 경우를 말함) 다양한 기능들을 수행할 수 있다:
- 캐싱 (캐시는 공개 또는 비공개가 될 수 있다. 예: 브라우저 캐시)
- 필터링 (바이러스 백신 스캔, 유해 컨텐츠 차단 (자녀 보호) 기능)
- 로드 밸런싱 (여러 서버들이 서로 다른 요청을 처리하도록 허용)
- 인증 (다양한 리소스에 대한 접근 제어)
- 로깅 (이력 정보를 저장)
'BackEnd' 카테고리의 다른 글
[인터넷] 도메인이란? (1) | 2024.12.24 |
---|---|
[인터넷] DNS란? (0) | 2024.12.23 |
인터넷의 작동 원리 (2) (0) | 2024.12.03 |
인터넷의 작동 원리 (1) (3) | 2024.12.03 |
백엔드 로드맵 (0) | 2024.12.03 |