̱URI(Uniform Resource Identifier)
URI 를 번역하면 자원을 식별하는 통합된 방법입니다.
URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있습니다.
그럼 로케이터(locator)와 이름(name)은 정확히 무엇일까요?
(URI, URL, URN 중에 URI 가 가장 큰 개념입니다. )
URL 은 자원의 위치로 우리가 흔히 웹브라우저에서 사용하는 주소
URN 은 자원의 이름으로 위 그림과 같이 이름을 부여하는 것인데,
이름만 가지고는 주소를 찾아갈 수 없기에 URL 을 많이 사용합니다.
URI
Uniform: 리소스 식별하는 통일된 방식
Resource: 자원, URI로 식별할 수 있는 모든 것을 말합니다. (html, 파일, 실시간 교통 정보 등)
Identifier: 다른 항목과 구분하는데 필요한 정보
URL, URN
URL - Locator: 리소스가 있는 위치를 지정합니다.
URN - Name: 리소스에 이름을 부여합니다.
위치는 변할 수 있지만, 이름은 변하지 않습니다.
URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되어있지 않습니다.
URL 전체 문법
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
프로토콜(https)
호스트명(www.google.com)
포트 번호(443)
패스(/search)
쿼리 파라미터(q=hello&hl=ko)
URL scheme
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
scheme 에는 주로 프로토콜을 사용합니다.
프로토콜은 어떤 방식으로 자원에 접근할 것인지 정해놓은 규칙을 의미합니다.
ex) http, https, ftp ..
http는 80 포트, https는 443 포트를 주로 사용하며 이 두 프로토콜을 사용하면 포트를 생략할 수 있습니다.
https(HTTP Secure) 는 http 에 보안 기능이 추가된 프로토콜입니다. 대부분의 웹 사이트들이 https 를 사용하고
있습니다.
URL userinfo
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
URL에 사용자정보를 포함해서 인증할 때 사용하지만 거의 사용하지 않습니다.
URL host
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
host 는 호스트명을 의미합니다. 도메인명 또는 요청을 받는 컴퓨터인 서버의 IP 주소를 직접 사용할 수 있습니다.
URL PORT
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
port 는 포트 번호를 의미하며 요청을 받는 컴퓨터인 서버의 포트 번호를 입력합니다.
일반적으로 생략할 수 있고 생략시 http는 80, https는 443 입니다.
URL path
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
path 는 자원이 있는 경로를 의미합니다. 계층적 구조를 갖고 있습니다.
ex) /home/file1.jpg, /members, /members/100, /items/iphone12
URL query
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
query 는 key=value 형태이며, ?로 시작, &로 추가할 수 있습니다. ex) ?keyA=valueA&keyB=valueB
웹서버에 제공하는 파라미터여서 query parameter, URL 에 입력되는 값은 모두 문자 타입이기 때문에
query string 로도 불립니다.
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 내부에서 다른 사이트로 이동할 때 사용합니다.
서버에 전송하는 정보가 아니며 잘 사용하지 않습니다.
웹 브라우저 요청 흐름
클라이언트는 웹 브라우저를 통해 위 그림에 나와있는 URL 을 입력해 요청합니다.
1. 구글 서버를 찾기 위해 입력한 host 값인 도메인으로 DNS 에서 도메인에 해당하는 IP 가 있는지 찾습니다.
2. 포트는 현재 URL 의 schema 의 값인 프로토콜이 https 여서 443이 붙습니다.
3. HTTP 요청 메시지를 생성합니다.
4. SOCKET 라이브러리를 통해 생성된 HTTP 요청 메시지를 OS 에 전달합니다.
5. 전달받은 HTTP 요청 메시지에 출발지 IP, 도착지 IP 와 출발지 PORT, 목적지 PORT 를 추가해
TCP/ IP 패킷을 생성해 서버에 전송합니다.
6. 패킷을 받은 서버는 HTTP 요청 메시지를 꺼내 해석한 후, HTTP 응답 메시지를 생성, 클라이언트가
TCP/ IP 패킷을 생성한 것처럼 TCP/ IP 패킷을 생성해 클라이언트에게 전송합니다.
7. 클라이언트는 서버가 보낸 TCP/ IP 패킷에서 HTTP 응답 메시지를 꺼내서 웹 브라우저를 이용해 확인합니다.
결국 웹 브라우저에 보여지는 화면은 HTTP 응답 메시지를 웹 브라우저가 해석한 결과입니다.
'Network' 카테고리의 다른 글
[NetWork] HTTP 상태 코드 (0) | 2023.02.10 |
---|---|
[NetWork] HTTP 메서드 (0) | 2023.02.09 |
[NetWork] HTTP(Hyper Text Transfer Protocol) (1) | 2023.02.05 |
[NetWork] 인터넷 네트워크 (0) | 2023.02.04 |
[Network] IP 주소 (0) | 2022.10.25 |
댓글