Uniform Resource Identifier의 줄임말로, 인터넷 상에서 어떤 자원을 식별하기 위한 문자열의 구성이다. URL과 URN은 URI의 하위개념이라 할 수 있다. URL은 리소스가 있는 위치를 나타내고, URN은 리소스에 이름을 부여한다.
URL은 우리가 흔히 인터넷 브라우저 주소창에 입력하는 문자들이다.
https://www.google.com:443/search?q=hello&hl=ko
위 예시를 구조별로 해석하면 다음과 같이 나타낼 수 있다.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
scheme
주로 프로토콜이 들어가고, 프로토콜은 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙을 말한다.(http,https,ftp 등)
userinfo
url에 사용자 정보를 포함해서 인증을 할 때 사용하는데, 거의 사용하지 않는다.
host
호스트 명을 나타낸다. 도메인 이름이나 IP주소가 들어간다.
port
http는 80, https는 443 포트를 사용하며, http와 https를 사용할 경우 포트는 URL 주소에서 생략될 수 있다.
path
리소스 경로를 나타내며, 계층적 구조로 되어있다.(폴더 경로 저장하는 것 처럼)
query
key=value 형태로 되어있다. ?
로 시작해서 &
을 이용해 추가적인 파라미터를 붙일 수 있다.
fragment
html 내부 북마크 등에 사용되며, 서버에 전송되진 않는다.
웹 브라우저 주소창에 다음과 같이 입력하고 엔터를 누르면
https://www.google.com:443/search?q=hello&hl=ko
www.google.com:443
-> DNS를 조회해서 IP를 알아내고 포트 정보를 가져온다.GET /search?q=hello&hl=ko HTTP/1.1(HTTP 버전 정보)
HOST: www.google.com
생성된 HTTP 요청 메시지는 SOCKET 라이브러리를 통해 TCP/IP에 전달되고 HTTP 메시지(1차 포장)가 포함된 TCP/IP 패킷(2차 포장)이 생성된다.
생성된 패킷이 인터넷을 통해 구글 서버에 도착한다.
구글 서버에서 다음과 같은 HTTP 응답 메시지를 생성해서 다시 원래 웹브라우저로 전송한다.
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>