HTTP(Hyper Text Transform Protocol)은 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜(통신 규약)이다.
프로토콜?
무전기는 전파를 이용해서 음성 데이터 등을 주고받을 수 있는 기기이다. 전이중통신인 전화기와 달리, 무전기는 반이중통신을 기반으로 한다. 이 때문에 혼선을 사전에 방지하기 위해 무전 교신시에 메시지 전달을 끝마친 후에 '이상' 과 같이 응답하는 규칙을 사용한다.
이와 마찬가지로 컴퓨터 네트워크 통신을 위해서 사전에 제정된 약속, 즉 규칙이 존재하며, 이를 "프로토콜" 이라고 부른다.
웹 에서는 브라우저와 서버간에 데이터를 주고받기 위한 방식으로 HTTP 프로토콜을 사용하고 있으며, FT개발자라면 필수적으로 알아야하는 지식이다.
(클라이언트 - 서버) 프로토콜?
보통 웹 브라우저인 수신자 측에 의해 요청이 초기화 되는 프로토콜을 의미한다.
하나의 완전한 문서는 텍스트, 레이아웃 설명, 이미지, 비디오, 스크립트 등을 불러온(fetched) 하위 문서들로 재구성된다.
HTTP는 (클라이언트 - 서버) 사이의 존재하는 프로토콜이다.
요청(request)은 하나의 개체인 사용자 에이전트(프록시)에 의해 전송된다. 대부분의 경우, 사용자 에이전트는 브라우저이지만 무엇이든 될 수 있다. (웹을 돌아다니는 로봇도 될 수 있음)
이렇게 각각의 요청은(Request)들은 서버로 보내지며, 서버는 요청을 처리하고 Response라고 불리는 응답을 제공한다. 이 요청(Request)과 응답(Response) 사이에는 여러 개체들이 있는데, 다양한 작업을 수행하는 Gateway 또는 Cache 역할을 하는 Proxy 등이 있다.
즉, 클라이언트(브라우저)와 서버 사이에는 다양하고 많은 컴퓨터 종류가 존재한다.(라우터, 모뎀 등)
요청(Request)을 보내는 쪽을 의미하고, 일반적으로 웹 관점에서 브라우저를 의미한다. 브라우저는 항상 요청(Request)을 보내는 객체로, 결코! 서버가 될 수 없다.
사용자 에이전트는 사용자를 대신하여 동작하는 모든 도구로, 이 역할은 주로 브라우저에 의해 수행된다. (엔지니어와 자신들의 애플리케이션을 디버그하는 웹 개발자들이 사용하는 프로그램(VsCode, IntelliJ...)은 예외)
웹 페이지를 표시하기 위해, 브라우저는 페이지의 HTML 문서를 가져오기 위한 요청을 전송한 뒤, 파일을 분석하여 실행해야 할 Script, 그리고 페이지 내 포함된 하위 리소스들(이미지 / 비디오)를 잘 표시하기 위한 레이아웃 정보(CSS)에 대응하는 추가적인 요청들을 가져온다. 그런 뒤에 브라우저는 완전한 문서인 웹페이지를 표시하기 위해 그 리소스들을 혼합한다. 브라우저에 의해 실행된 스크립트는 이후 단계에서 좀 더 많은 리소스들을 가져올 수 있으며, 브라우저는 그에따라 웹 페이지를 갱신하게 된다.
웹 페이지는 하이퍼텍스트 문서로, 표시된 텍스트의 일부는 사용자가 사용자 에이전트를 제어하고 웹을 돌아다닐 수 있도록 새로운 웹 페이지를 가져오기 위해 실행(보통 마우스 클릭에 의해)될 수 있는 링크임을 뜻합니다. 브라우저는 HTTP 요청 내에서 이런 지시 사항들을 변환하고 HTTP 응답을 해석하여 사용자에게 명확한 응답을 표시한다.
요청을 받아 응답(Response)하는 쪽을 의미하며, 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미한다.
통신 채널의 반대편에는 클라이언트에 의한 요청(Request)에 대한 문서를 제공(Response)하는 서버가 존재한다.
클라이언트와 서버간의 응답, 요청을 하게 되는데 중계 역할을 하는 서버를 말한다.
트랙픽 부하, 캐쉬 , 보안 여러 가지 목적에 따라 프록시 서버를 사용하게 된다.
클라이언트에서 프록시 서버로 데이터 전송
프록시 서버에서 다시 웹 서버로 웹 요청(Request)
웹 서버에서 프록시 서버로 웹 응답(Response)
프록시 서버에서 클라이언트로 데이터 전송
여러 계층으로 이루어진 웹 스택 구조에서 이러한 컴퓨터 / 머신 대부분은 전송(Response), 네트워크 혹은 물리 계층에서 동작하며, 성능에 상당히 큰 영향을 주지만 HTTP 계층에서는 이들이 어떻게 동작하는지 눈에 보이지 않는다. 이러한 컴퓨터 / 머신 중에서 애플리케이션 계층에서 동작하는 것들을 일반적으로 Proxy라고 부른다.
프록시는 눈에 보이거나, 그렇지 않을수도 있고 다양한 기능을 수행할 수 있다.
Caching (캐시는 공개 / 비공개 일 수 있다.)
필터링 (바이러스 백신 스캔, 유해 컨텐츠 차단(자녀보호) 기능)
로드 밸런싱 (여러 서버들이 서로 다른 요청을 처리하도록 허용)
인증 (다양한 리소스에 대한 접근 제어)
로깅 (이력 정보를 저장)
HTTP의 확장 가능한 특성은 수년간에 걸쳐 웹의 점점 더 많은 기능들을 제어하고 허용해 왔다. (캐시 혹은 인증 메서드는 HTTP에 초기부터 제어해왔던 기능이다)
클라이언트가 서버와 통신하려고 할 때, 최종 도착지가 서버든 / 프록시든 아래 관계를 반드시 거치게 된다!
TCP(Transmission Control Protocol)
데이터가 의도된 목적지까지 닿을 수 잇도록 보장해주는 통신 프로토콜.
최상위 계층인 TCP는 많은 양의 데이터를 가져와서 패킷(데이터를 일정한 크기로 자른 단위)으로 컴파일 한다음, 동료 TCP 계층에서 수신하도록 전송하여 패킷을 유용한 정보 / 데이터로 바꾸는 역할을 한다.
IP(Internet Protocol)
데이터가 의도된 목적지까지 닿을 수 잇도록 보장해주는 통신 프로토콜.
인터넷에서 컴퓨터의 위치를 찾아 데이터를 전송하기 위해 지켜야할 규약으로 각각의 컴퓨터에 특별한 주소를 부여하는 것!
Get / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
HTTP 메시지의 두 가지 타입인 요청(Request)과 응답(Response)은 각자의 특성있는 형식을 가지고 있다.
URL을 이용하면 서버에 특정 데이터를 요청할 수 있다.
HTTP 요청 메서드(HTTP Request Method)
HTTP 요청의 예
앞에서 URL과 요청 메서드가 클라이언트에서 설정해야 할 정보라면
HTTP 상태 코드(HTTP Status Code)는 서버에서 설정해주는 응답(Response)정보이다.
이 상태 코드로 에러 처리를 할 수 있다!
2xx : 성공
3XX : 리다이렉션
4xx : 클라이언트 에러
5xx : 서버 에러
HTTP 기반으로 가장 일반적으로 사용된 API는 User Agent와 서버간의 데이터를 교환하는 데 사용될 수 있는 XHLHttpRequest API이다. Fetch API는 보다 더 강력하고 유연한 기능을 제공한다.
서버에 자원을 요청하기 위해 입력하는 영문 주소로, IP주소보다 기억하기 쉽기 때문에 사용한다.