http는 무엇인가?
인터넷 주소를 보면 맨 앞에 늘 붙는 것이 있습니다. 바로 http입니다. HyperText Transfer Protocol의 줄임말일 이것은 우리가 인터넷을 사용하며 수없이 보아왔습니다. 그러나 명확하게 무엇을 하는지는 알기 쉽지 않습니다. 오늘은 http가 무슨일을 하며 왜 존재하는지 알아보겠습니다.
http의 탄생
http는 웹이 탄생하던 시절부터 존재했습니다. ‘팀 버너스 리’경이 웹을 탄생시켰을 때 가장 중요한 요소는 4가지 였습니다.
- HTML
- URL, URI
- Web Browser, Web Server
- http
여기서 http의 일은 웹 브라우저와 서버가 서로 대화하는 언어의 역할입니다. 즉 브라우저(클라이언트)와 서버의 통신을 담당했습니다.
http의 통신 방식
통신에 대해 깊게 들어가면 복잡합니다. 그러나 크게 2가지 방식으로 이뤄지데요. 브라우저가 정보를 요구하는 request와 서버가 이에 대해 답변하는 response 입니다. 브라우저의 개발자 도구의 network에 들어가면 브라우저와 서버의 소통을 확인할 수 있습니다.
:authority: doyun.ga
:method: GET
:path: /
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,es;q=0.6
cache-control: max-age=0
if-modified-since: Wed, 23 Jun 2021 06:29:00 GMT
if-none-match: W/"60d2d4ac-2127"
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
위에 작성한 정보들은 제 개인 홈페이지를 불러올 때 브라우저가 요청하는 request입니다. 개발자 도구의 network에서 request를 통해 확인 가능합니다. 마찬가지로 response도 확인 가능합니다.
accept-ranges: bytes
access-control-allow-origin: *
age: 14
cache-control: max-age=600
content-encoding: gzip
content-length: 2038
content-type: text/html; charset=utf-8
date: Thu, 24 Jun 2021 05:43:05 GMT
etag: W/"60d2d4ac-2127"
expires: Thu, 24 Jun 2021 05:52:50 GMT
last-modified: Wed, 23 Jun 2021 06:29:00 GMT
server: GitHub.com
vary: Accept-Encoding
via: 1.1 varnish
x-cache: HIT
x-cache-hits: 1
x-fastly-request-id: c739701e03a16bc2a7990aeaba84753db0832927
x-github-request-id: 1072:59D8:6ACE8:7DA71:60D2D95E
x-proxy-cache: MISS
x-served-by: cache-hkg17931-HKG
x-timer: S1624513385.022156,VS0,VE0
위의 정보가 브라우저의 request를 받고 서버가 전달하는 response입니다. 이렇게 둘이 소통하면서 브라우저는 페이지를 구성하게 됩니다. 웹 초창기부터 이런 소통의 형식을 http로 정했고 이것은 더해지고 수정되기도 하면서 지금까지 이어졌습니다.
http Status code
처음부터 http를 깊게 들어가긴 어렵습니다. 웹 통신의 중추인만큼 담당하는 역할이 다양하기 때문이죠. 그럼에도 우리가 이미 익숙한 부분이 하나 있습니다. 바로 status code입니다. 웹 정보를 요청했을 때 요청을 처리하면서 전달되는 이 코드는 정보 전송의 성공, redirection, 실패 등을 나타냅니다. 브라우저 오류가 발생할 때 흔히 404 error로 전달받는데 이 404역시 status code의 한 방식입니다. 200대 code는 전송이 성공함을 의미합니다. 뒤에 붙는 숫자는 그 세부적인 정보를 나타내지만 결과적으로 모두 정보가 정상적으로 전달됨을 의미하죠. 300대는 redirection을 의미합니다. 이는 향후에 자세히 다루도록 하죠. 가장 많이 접하는 400대 코드는 클라이언트 오류를 뜻합니다. 전달한 정보가 잘못되거나 없는 서버에 연결할 경우 400대 오류를 보게 됩니다. 404 not found오류나 403 forbidden처럼 우리가 사이트를 열지 못할 경우 오류 코드가 나타나기 때문에 쉽게 기억하는 경향이 있죠. 500번대 역시 에러입니다. 그러나 이 경우는 서버측에서 나타난 오류죠. 클라이언트는 정상적으로 전달했지만, 서버측에서 문제가 발생할 경우 500대 오류가 전달됩니다.