Git & CS
URI, URL, URN, 웹 브라우저 요청 흐름
승민아
2024. 5. 25. 13:43
URI, URL 차이가 무엇인지 이번에 확실히 이해해보자.
URI, URL, URN?
URI는 Uniform Resource Identifier이다.
말 그대로 "리소스를 구별 식별하는 통일된 방식"이다.
그러면 URL, URN은 무슨 말일까?
URL는 Uniform Resource Locator으로 리소스에 위치를 지정하여 구별하는것
URN는 Uniform Resource Name으로 리소스에 이름을 지정하여 구별하는것
그렇다~
URL은 위치, URN은 이름으로 리소스를 구별하는 것이다.
그럼 URI는 "리소스를 구분하는 통일된 방식"이니깐 URL, URN을 포함하는 개념일 것이다.
포함하는 개념이 맞다.
URI와 URL을 구분하지 않고 불러도 괜찮다.
URI는 위치(Locate), 이름(Name) 또는 둘 다로 분류할 수 있기 때문이다.
URL 형식
형식은 다음과 같지만 예를 추가로 들어 쉽게 이해해보자.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
- [userinfo@] : URL에 사용자 정보를 포함해서 인증하는 용도인데 거의 사용하지 않는다.
foo://example.com:8042/over/there?name=ferret#nose
1. foo는 scheme 부분이다.
- 어떤 방식으로 자원에 접근할 것인지 약속인 프로토콜이 주로 온다.
- ex) http, https, ftp
2. example.com는 host 부분이다.
- 호스트명을 사용하며 도메인명 또는 IP 주소를 직접 사용한다.
2-1. :8042는 port 부분이다.
- 접속 포트를 표현한다.
- 일반적으로 생략하며 생략시 http는 80으로 https는 443으로 입력된다.
3. /over/there는 path 부분이다.
- 리소스 경로를 나타내며 계층적으로 표현할 수 있다.
4. ?name=ferret는 query 부분이다.
- key = value 형태로 작성한다.
- ?로 시작하고, &로 추가 파라미터를 연결한다.
- 쿼리 파라미터, 쿼리 스트링으로도 불리는데 숫자 123을 넣어도 문자 형태로 넘어가기 때문에 쿼리 스트링이라고도 부름.
5. #nose는 fragment 부분이다.
- html의 어떤 중간 위치로 이동할때 사용한다.
- html 내부 북마크로 사용한다.
- 서버로 전송하는 정보는 아니다.
웹 브라우저 요청 흐름
우리가 다음 경로로 요청한다고 가정해보자.
https://www.google.com:443/search?q=hello&hl=ko
위와 같은 HTTP 요청 메시지를 웹 브라우저에서 만들어서 해당 서버로 전송할 것이다.
어떻게 전달될까?
- 웹 브라우저가 HTTP 요청 메시지를 생성
- Socket을 통해 TCP/IP 패킷을 덧 붙인다.
- 이 메시지를 해당 서버로 전송한다.
해당 메시지를 받은 서버는 다음과 같은 "응답 메시지"를 생성한다.
우리 클라이언트는 이 응답 메시지를 웹 브라우저를 통해 HTML 렌더링하여 보는 것이다.