인프런 - 모든 개발자를 위한 HTTP 웹 기본지식 강의를 수강하며 수강섹션에 따라 총 8개의 파트로 분리하여 정리해 보려 합니다.
- 인터넷 네트워크
- URI와 웹 브라우저 요청흐름
- HTTP 기본
- HTTP 메서드
- HTTP 메서드 활용
- HTTP 상태코드
- HTTP헤더1 - 일반 헤더
- HTTP헤더2 - 캐시와 조건부 요청
이번에는 그 두번째 섹션인 URI와 웹 브라우저 요청흐름에 대해 정리하겠습니다.
URI란 Uniform Resource Identifier 의 약자로 리소스를 구분할 수 있는 식별자입니다.
Uniform : 리소스 시별하는 통일된 방식
Resource : 자원, URI로 식별할 수 있는 모든 것(제한이 없습니다.)
Identifier : 다른 항목과 구분하는데 필요한 정보
URI와 URL, URN등 많이 헷갈리는 용어에 대해서 정리해보려 합니다. URI는 로케이터(Locator)와 이름(Name) 또는 둘다 추가로 분류 될 수 있습니다. 그림을 보면 조금 더 쉽게 이해가 됩니다.
URL : Uniform Resource Locator - 리소스가 있는 위치를 지정
URN : Uniform Resource Name - 리소스에 이름을 부여
위치는 변할 수 있지만, 이름은 변하지 않습니다. 예를 들어 책 뒷면을 보면 isbn이 있습니다.이 isbn이 URN의 예로 들수 있습니다. URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되어 있지는 않습니다.
[schema]://[userinfo@]host[:port][/path][?query][#fragment]
ex) http://www.google.com:443/search?q=hello&hl=ko
URL의 구성을 [블럭] 을 기준으로 하나하나 살펴보겠습니다.
클라이언트는 구글 검색창에 hello를 검색하게 된다면 웹브라우저 주소창에 https://www.google.com:443/search?q=hello&hl=ko 와 같이 요청하게 됩니다.
이는 서버로 전송되게 되는데 이때의 흐름을 한번 정리해보겠습니다.
먼저 구글서버를 찾기 위해 DNS서버를 조회하여 www.google.com 이라는 도메인주소를 가진 IP주소를 받아 구글 IP주소에 요청을 하게 됩니다.
이때 클라이언트는 HTTP 요청 메시지를 생성하여 요청하게 되는데
요청 메시지는 위 사진과 같이 생겼습니다. HTTP METHOD와 앞서 말했던 query parameter(query string) 과 HTTP 버전정보 등이 보이는데 이에 관련해서는 HTTP메시지에 관련글에서 자세히 정리하겠습니다.
HTTP 요청 메시지를 생성한다음에는 SOCKET라이브러리를 통해 전달되고 TCP의 3 way handshake를 통해 구글 서버와 연결을 하고 생성한 HTTP메시지를 전달합니다.
그리고 나서 생성한 HTTP메시지를 TCP/IP 패킷을 생성하여 아래 그림과 같이 감싸게 됩니다.
그 후에는 웹브라우저가 구글서버로 생성한 요청 패킷을 전달하게 되고 패킷을 전달받은 구글서버는
다음과 같이 HTTP 응답메시지를 생성하여 HTTP 요청메시지와 같은 방식으로 패킷으로 감싸서
클라이언트에게 전달하게 됩니다.
그 후에는 서버에서 보낸 HTTP 응답 패킷을 읽어 클라이언트에서 HTML렌더링을 통해 http://www.google.com:443/search?q=hello&hl=ko 의 결과값을 사용자가 화면으로 보게 됩니다.
여기까지 HTTP - URL과 웹브라우저의 요청흐름에 대한 정리였습니다.