title: HTTP The Definitive Guide - 02. URLs and Resources
date: 2022-10-14
tags:
- Network
- HTTP
Introduction
GDSC에서 해당 서적을 통해 HTTP를 공부하는 스터디에 참가하고 있다.
HTTP 이전의 내용에 대한 지식도 부족하지만, 이 부분은 개인적으로 공부하며 채울 예정이다.
이번 Chapter는 02장 URLs and Resources
이다.
Purpose
URL과 전달하는 정보에 대해 파악한다.
Before URL
Web과 URL의 도입 전에는 네트워크를 이용하는 것이 매우 불편하였다.something.com
에 있는 temp.file
을 가져오려고 할 때 접속 방식은 아래와 같았다.
FTP를 이용하여
ftp.something.com
에 접속하여anonymous
로 로그인한다. User 이름과 비밀번호를 입력한 후, pub Directory로 이동한 후 Binary Mode로 바꾼다. 마지막으로temp.file
을 가져오면 된다.
이와 같이 많은 작업이 필요하였으며, Protocol 혹은 파일 경로, 권한에 따라 방식이 조금씩 달라 전달하는 사람은 물론 전달받는 사람 모두 불편한 작업을 겪어야 했다.
URL의 도입 이후, 이러한 불필요한 작업은 단순히 `http://something.com/temp.file 처럼 접근하는 방식으로 바뀌어 매우 편리해졌다.
URL Syntax
이전 Chapter에서 찾아본 내용이 현 Chapter에서 자세히 나온다.
URL Syntax는 정확히 다음과 같다. 각 항목은 Default Value가 존재하며, 명시하지 않는 항목의 경우 None
으로 취급되어 사용되지 않는다.<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
- Scheme - 사용하고자 하는 Protocol이다. Web은 주로 http 혹은 https를 이용한다.
- User - 접속하고자 하는 User 이름이다. Default는
anonymous
이다. - Password - User 이름에 맞는 비밀번호이다. Default는 이다.
- Host - IP 주소이며, 흔히
google.com
에서google
에 해당하는 부분으로, 이는 DNS를 통해 IP로 변환되기에 편하게 사용하는 것이다. - Port - Protocol별로 default Port가 존재한다. Default 또한 Scheme에서 사용하는 Protocol의 Port이다.
- Path - URL 이후에 가져오고자 하는 Resource의 위치 및 대상을 의미한다.
/
로 구분되며, 구분된 각 영역은 segment로 분할된다. - Params - Resource를 정확하게 지정할 때 사용한다. name=value 방식이며 Resource의 타입, binary mode <-> text mode 와 같은 것들을 특정할 수 있다.
- Query - DB같은 Service에서 특정 Resource를 가져올 때 사용한다. Params와 동일하게 name=value 방식이며, Query의 조건이 여러개라면
&
를 이용하여 나열한다. - Frag - HTML과 같은 일부 Resource에서 특정 Resource를 가져올 때 사용한다. HTML에서
id=SOMETHING
일 경우URL...#SOMETHING
처럼 이용하며, 해당 Fragment로 이동하는 Shortcut을 만들고자 하면<a href="#SOMETHING">Shortcut</a>
처럼 지정한다.- Server에서 우선 전체 Resource를 가져온 후, 내부적으로 Fragment를 이용하여 특정 Resource만 보여준다. Fragment 지정은 내부적인 동작이지, 특정 Resource만 가져오는 것이 아니다.
- Server에서 우선 전체 Resource를 가져온 후, 내부적으로 Fragment를 이용하여 특정 Resource만 보여준다. Fragment 지정은 내부적인 동작이지, 특정 Resource만 가져오는 것이 아니다.
URL Shortcut
구글에 접속할 때, https://google.com/
처럼 모든 URL을 입력하는 대신 google.com
처럼 입력하여 사용한다.
전자는 Absolute URL, 후자는 Relative URL이다.
HTML에서 <a href="./something">
와 같은 부분이 존재할 수 있다. 이는 Relative URL의 Base URL을 이용하여 Absolute URL로 만들어준다.
Relative URL이 주어지면 내부적으로 아래의 알고리즘을 이용하여 Absolute URL로 변경한다.
Browser 이용시 g
혹은 go
까지만 입력하여도 google
이 자동으로 완성되어 편하게 이용할 수 있다.
이는 Expandomatic URL이라 칭하며, 크게 두 가지 방식으로 Expansion을 지원한다.
- Hostname Expansion -
google
을 입력하면 Browser가 자동으로 이를 인식하여www.
와.com
을 붙여www.google.com
을 완성한다. - History Expansion - 과거의 History를 이용하여 Expansion이 이루어진다. 최초에는 History가 존재하지 않기에 지원을 하지 않지만, Browser가 이를 기억하여
www.goo
만 입력하여도 History를 이용하여www.google.com
처럼 만들어준다.
다만 Proxy와 같은 일부 HTTP Application에서 문제가 발생하며, 이는 Chapter 6에서 다시 살펴본다.
Character
각 나라마다 언어가 다르고, 해당 언어들을 이용하여 URL을 구성하는 것이 편할 것이다.
하지만 Web은 전세계에서 공통적으로 사용하며, 일부 문자의 경우 출력이 불가능하거나 아예 보이지 않는 문자도 존재한다. 그렇기에 ASCII만으로 표현할 수 없는 다양한 문자들을 자유롭게 사용한다면 많은 문제가 발생할 수 있다.
이러한 문제들로 인하여 기본적으로 ASCII 문자들을 이용하여 URL을 구성한다.?
, &
와 같은 문자들을 이용하고 싶을 수 있는데, 해당 문자들은 URL Syntax에서 사용하는 문자이다. 당연하게도 이 문자를 그대로 작성하면 문제가 생길 수 있다.
이로 인하여 Escape Sequence가 도입된다. %
뒤에 각 문자의 16진수 표현으로 해당 문자를 표현할 수 있다. 이는 Percent Encoding이라고도 불린다.
URL은 안전하지만, 문서
와 같이 다른 언어로 구성이 된 Resource에 접근하는 경우가 생길 수 있다.
이 경우, 해당 언어를 UTF-8 방식으로 변환하여 %BYTE_HEX%BYTE_HEX
방식으로 처리가 되어 URL에서 이를 안전하게 이용할 수 있다.www.temp.com
의 문서
Resource를 접근할 때, www.temp.com/문서
처럼 작성한다.
그러면 이는 내부적으로 문서
를 %EB%AC%B8%EC%84%9C
로 변환하여 www.temp.com/%EB%AC%B8%EC%84%9C
처럼 바뀌어 안전하게 사용한다.
Future of URL
URL은 위치를 나타내기에 완벽하지 않다. 상대적인 표현을 통해 절대적인 Resource에 접근하기에, 위치가 바뀌면 해당 Resource에 접근하지 못할 수 있다.
이 때문에 Internet Engineering Task Force (IETF)는 URN을 새로운 표준으로 만들고자 노력하고 있다.
URN은 URL과 다르게 고유한 이름을 가지기에 어디에 존재하든 권한만 있다면 접근할 수 있다.
Persistent URL (PURL)은 URL에 URN을 적용한 하나의 방식이다.
PURL을 이용하여 Request를 보내며, 해당 PURL을 가지는 실제 URL을 다시 Response로 준다. Response로 받은 URL을 이용하여 Request를 할 수 있다.
URL이 바뀌더라도 PURL은 변하지 않기에 더욱 유연하게 Web을 이용할 수 있는 것이다.
하지만 URL에 매우 익숙한 상황에서 URN을 사용하는 환경으로 바꾸기는 매우 어렵다.
이를 바꾸는 것은 매우 많은 변화를 요구할 것이며, 완전히 URN을 사용하는 환경으로 바꾸기에는 매우 긴 시간이 소요될 것이다.
그럼에도 URL은 한계가 있기에 URN 혹은 무언가로 변경할 필요성은 점점 증가할 것이다.
Conclusion
URL과 Resource에 대한 내용을 중점적으로 다룬 Chapter이다.
기술이 급격하게 발전하는 현 상황에서, URN 혹은 비슷한 무언가에 대한 필요성은 계속 증가할 것이다.
상황과 트렌드를 파악하고, 변화가 필요한 시기가 오기 전에 이에 대응할 준비를 해야할 것이다.
'Network' 카테고리의 다른 글
HTTP The Definitive Guide - 04. Connection Management (0) | 2022.11.07 |
---|---|
HTTP The Definitive Guide - 03. HTTP Messages (0) | 2022.11.04 |
성공과 실패를 결정하는 1%의 네트워크 원리 - 2. Data of TCP/IP to Electronic Signal (0) | 2022.10.25 |
성공과 실패를 결정하는 1%의 네트워크 원리 - 1. Web Browser (0) | 2022.10.20 |
HTTP The Definitive Guide - 01. Overview of HTTP (0) | 2022.10.13 |