본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
이론/HTTP

HTTP 웹 기본 지식 - URI 와 웹 브라우저 요청 흐름

by 방구석 대학생 2022. 2. 21.

"인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 작성한 글입니다."

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

URI(Uniform Resource Identifier)

URI, URL, URN 각각 뭐가 어떻게 다를까?

 

* URI 는 로케이터(locator), 이름(name) 등으로 분류할 수 있다.

 

URI 전체 구조

위의 구조는 URI 라는 가장 큰 개념에서 시작한다. 여기서 URI 는 리소스를 식별하는 식별자의 역할을 한다.

식별하는 방법은 크게 두 가지가 있는데, 첫번째는 URL(Resource Locator), 즉 리소스의 위치를 나타내는 정보이다.

두번째는 URN(Resource Name), 즉 리소스의 이름을 나타내는 정보이다.

 

일반적으로 URL 과 URN 은 다음과 같은 구조로 되어 있다.

* URI 단어 뜻

- Uniform : 리소스를 식별하는 통일된 방식

- Resource : 자원, URI 로 식별할 수 있는 모든 것(제한 없음)

- Identifier : 다른 항목과 구분하는데 필요한 정보

 

- URL : Uniform Resource Locator

- URN : Uniform Resource Name

 

* URL, URN 단어 뜻

- URL : 리소스가 있는 위치를 지정(Locator)

- URN : 리소스에 이름을 부여(Name)

- 위치는 변할 수 없지만, 이름은 변하지 않는다. 

- URN 예시 -> urn : isbn : 8960777331(어떤 책의 isbn URN)

- URN을 활용하여 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되어 있지 않다.

- 앞으로 URI 를 URL 과 같은 의미로 이야기하자.

 

* 다음과 같은 URL 을 분석해보자.

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com/search?q=hello&hl=ko

URL 전체 문법

- 프로토콜 : https

- 호스트명 : www.google.com  

- 포트 번호 : 443

- 패스 : /search

- 쿼리 파라미터 : q=hello&hi=ko

 

* URL : scheme

- 주로 프로토콜을 사용한다.(프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙)

- 예시) http, https, ftp 등

- http 는 80 포트, https 는 443 포트를 주로 사용한다. 포트 번호는 생략 가능하다.

- https 는 http 에 보안이 추가된 방식이다.(HTTP Secure)

 

* URL(userinfo)

- URL 에 사용자 정보를 포함해서 인증하며, 거의 사용하지 않는다.

 

* URL : host

- 호스트 명을 의미한다.

- 도메인 명 또는 IP 주소를 직접 사용 가능하다.(www.google.com)

 

* URL : PORT

- 접속하는 포트 번호를 의미한다.

- 일반적으로는 생략하며, 생략시 http 는 80, https 는 443 이다.

 

* URL : path

- 리소스 경로(path) 를 의미하며, 계층적인 구조이다.

- 예시 : /home/file1.jpg, /members, /members/100, /items/iphone12

 

* URL : query

- key=value 형태이다.

- ? 로 시작하며, & 로 쿼리 추가가 가능하다.(?keyA=valueA&keyB=valueB)

- query parameter, query string 등으로 불린다. 웹 서버에 제공하는 파라미터이며 문자 형태를 가진다.

 

* URL : fragment

- html 내부 북마크 등에 사용한다.

- 서버에 전송하는 정보는 아니다.

 

 

웹 브라우저 요청 흐름

위에서 했던 것처럼 URL 을 통해 접속 요청을 보내면 웹 브라우저는 어떻게 동작할까?

우선 DNS 서버를 조회한다. 이를 통해 요청받은 URL 도메인에 지정되어 있는 IP 주소를 찾게 된다.

(포트 번호의 경우 생략되어 있어도 프로토콜이 무엇이냐에 따라 알 수 있다.)

IP 정보와 포트 번호를 알아내고 나면 HTTP 요청 메시지를 생성한다.

HTTP 요청 메시지는 다음과 같은 형태로 생성된다.

 

* HTTP 메시지는 다음과 같은 구조로 전달된다.

1. 애플리케이션 상에서 웹 브라우저가 HTTP 메시지를 생성하고 socket 라이브러리를 통해 클라이언트 - 서버간 TCP 3 way handshake 를 통해 TCP/IP 연결을 한 다음 데이터를 OS 계층에 전달해준다.

2. OS 계층에서는 URL 을 통해 알아낸 TCP/IP 정보(IP, PORT) 를 전달하고자 하는 패킷에 덧씌운다.

3. 이후론 기존의 데이터 패킷 전달 과정을 거쳐 클라이언트에서 서버로 데이터가 전달된다.

- 생성된 패킷에서 전달되는 메시지 데이터가 바로 이때 생성된 HTTP 메시지에 해당된다.

 4. 서버에서 데이터 패킷을 받은 이후엔, 서버 측에서 클라이언트 측으로 HTTP 응답 메시지를 보낸다.(HTML 형식)

5. 클라이언트에서 HTTP 응답 메시지를 받고 나면 웹 브라우저 에서는 HTML 형식으로 넘어온 응답 메시지를 랜더링하여 최종적으로 화면을 출력하게 된다.