HTTP 웹 기본 지식

[HTTP 웹 기본 지식] 섹션 2. URI와 웹 브라우저 요청 흐름

wlalsu_u 2023. 7. 1. 13:23

2.1  URI (Uniform Resource Identifier)

: 소스를 식별하는 통합된 방법

 

 

URI? URL? URN? 의 차이는 무엇일까?

 

URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다.

 

 

1) URI : 리소스를 식별하는 가장 큰 개념이다. 

2) URL : 리소스의 위치를 알려준다.

3) URN : 리소스의 이름

 

 

우리가 흔히 웹 브라우저에서 사용하는 주소는 URL이다.

이때 URN은 리소스의 이름을 부여하는 것이다

 

 

 

 

URI (Uniform Resource Identifier) 단어 뜻

 

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

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

- Identifier: 다른 항목과 구분하는데 필요한 정보 (ex. 사람을 식별할 때는 주민번호)

 

 

 

URL(Uniform Resource Locator), URN(Uniform Resource Name) 뜻

 

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

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

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

- URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음

 

 

 

 

URL 분석

 

 

1) 전체 문법

 

- 프로토콜(https)

- 호스트명(www.google.com)

- 포트 번호(443)

- 패스(/search)

- 쿼리 파라미터(q=hello&hl=ko)

 

 

2) URL scheme

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

- 주로 프로토콜 사용

- 프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙

   예) http, https, ftp 등등

- http는 80 포트, https는 443 포트를 주로 사용 (포트는 생략 가능)

- https는 http에 강력한 보안 추가 (HTTP Secure)

 

 

2) URL userinfo

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

- URL에 사용자정보를 포함해서 인증

- 거의 사용하지 않음

 

 

3) URL host

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

- 호스트명

- 도메인명 또는 IP 주소를 직접 사용가능

 

 

4) URL port

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

- 포트(PORT)

- 접속 포트

- 일반적으로 생략 (생략시 http는 80, https는 443)

 

 

5) URL path

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

- 리소스 경로(path)로 계층적 구조

  예) /items/iphone12

 

 

6) URL query

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

- key=value 형태

- ?로 시작, &로 추가 가능

  ex) ?keyA=valueA&keyB=valueB

- query parameter, query string 등으로 불림

  (웹서버에 제공하는 파라미터, 문자 형태로 넘어감)

 

 

7) URL fragment

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://docs.spring.io/spring-boot/docs/current/reference/html/gettingstarted.html#getting-started-introducing-spring-boot

- fragment

- html 내부 북마크 등에 사용

- 서버에 전송하는 정보 아님

- 주로 사용하지 않음

 

 


 

2.2  웹 브라우저 요청 흐름

 

 

앞선 url를 웹 브라우저에서 구글 서버로 보낸다고 가정해보자.

 

1) 먼저 웹 브라우저가 DNS 서버를 조회한다. (IP : 200.200.200.2, Port : 443)

2) 웹 브라우저는 HTTP 요청 메시지를 생성한다.

 

 

 

HTTP 요청 메시지

 

 

HTTP 메시지 전송

 

1) 웹 브라우저가 HTTP 메시지를 생성한다.

2) 소켓 라이브러리를 통해서 OS에 TCP/IP를 전달한다.

이때, IP 와 PORT 정보로 구글 서버와 연결한다. (SYN, ACK)

3) TCP/IP 에서 패킷을 씌운다. (IP, PORT 정보가 들어 있음)

4) 패킷이 인터넷으로 흘러들어가 서버에 도착하게 된다.

 

 

 

패킷 생성

 

 

패킷은 출발지와 목적지의 IP와 PORT 주소를 담고 있으며,

전송데이터는 웹 브라우저가 만든 HTTP 메시지가 된다.

 

 

 

앞서 만들어진 패킷은 수많은 인터넷 노드를 통해서 IP : 200.200.200.2 로 전달된다.

 

구글 서버에 요청 패킷이 도착하면, 

TCP IP 패킷은 까서 버린 후 HTTP 메시지 해석하게 된다.

 

 

이후 서버는 HTTP 응답 메시지를 만든다.

 

HTTP 응답 메시지는 다음과 같은 정보를 포함한다. 

 

1) HTTP 버전, 200 OK

2) CONTENT-TYPE 이 HTML 형식이라는 것

3) 실제 HTML 데이터의 길이를 설정해서 보내줌

 

 

 

 

구글서버는 동일하게 응답 패킷을 만들고 웹 브라우저에 전달한다.

 

웹 브라우저는 HTTP 메시지를 열고,

HTML 데이터를 렌더링해서 결과물을 볼 수 있게 된다.