✔️ 본 포스팅은 HTTP 완벽 가이드 2장 내용입니다.
URL(Uniform Resource Location)은 인터넷의 리소스를 가리키는 표준 이름이다. URL은 전자정보 일부를 가리키고 그것이 어디에 있고 어떻게 접근할 수 있는지 알려준다.
여기서는 URL기준으로 설명한다.
웹, URL있기 전에는 네트워크 상에 산재해있는 데이터에 접근하기 위해서 애플리케이션마다 다른 분류 방식을 사용했다.
URL의 문법은 크게 9개로 나뉜다.
<스킴>:://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
컴포넌트 | 설명 | |
---|---|---|
스킴 | 리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야 하는지 가리킨다. | 없음 |
사용자 이름 | 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 한다. | anonymous |
비밀번호 | 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론(:)으로 이어서 기술한다 | <이메일 주소> |
호스트 | 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소 | 없음 |
포트 | 리소스를 호스팅하는 서버가 열어놓은 포트번호. 많은 스킴이 기본 포트를 가지고 있다. (HTTP 기본 포트 : 80) | 스킴에 따라 다름 |
경로 | 이전 컴포넌트와 빗금(/)으로 구분되어 있으며, 서버 내 리소스가 서버 어디에 있는지 가리킨다. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다르다. | 없음 |
파라미터 | 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용한다. 파라미터는 이름/값을 쌍으로 가진다. 파라미터는 다른 파라미터나 경로의 일부와 세미콜론(;)으로 구분하고, 여러 개를 가질 수 있다. | 없음 |
질의 | 스킴에서 애플리케이션에 파라미터를 전달하는데 쓰인다. 질의 컴포넌트를 작성하는데 쓰이는 공통 포맷은 없다. URL의 끝에 "?"로 구분한다. | 없음 |
프래그먼트 | 리소스의 조각이나 일부분을 가리키는 이름이다. URL이 특정 객체를 가리킬 경우에 프래그먼트 필드는 서버에 전달되지 않는다. 이는 클라이언트에서만 사용한다. URL의 끝에서 "#"문자로 구분한다. | 없음 |
웹 클라이언트는 몇몇 단축 URL을 인식하고 사용한다. 상대 URL은 리소스 안에 있는 리소스를 간결하게 기술하는데 사용할 수 있다. 많은 브라우저가 사용자가 기억하고 있는 URL 일부를 입력하면 나머지 부분을 자동으로 입력해주는 URL '자동 확장'을 지원한다.
상대 URL은 html 문서내에서 보이는 "./modal.html" 같은 것들이다.
URL을 입력한 다음이나 입력하고 있는 동안에 자동으로 URL을 확장한다.
자동으로 URL이 확장되기 때문에 전체 URL을 쓰지 않아도 된다.
확장기능은 다음과 같다.
1. 호스트명 확장
주소창에 yahoo치면 자동으로 www.와 .com을 붙인다.
URL은 잘 호환되도록 설계되었다.
모든 프로토콜이 데이터를 전송하기 위해서 서로다른 장치를 가지고 있기 때문에, 어떤 인터넷 프로토콜이든 안전하게 전송될 수 있도록 해야했다.
URL은 상대적으로 작고 일반적으로 안전한 알파벳 문자마나 포함하도록 한다.
그래서 출력이 되지 않거나 보이지 않는 문자를 이메일 프로그램에서 쓸 수 있다고해서 URL에서 쓰는것은 금지시켰다.
이스케이프 기능도 추가하여 안전하지 않은 문자를 안전하게 인코딩하는 기능까지 넣었다.
컴퓨터 시스템 자체가 영어중심으로 설정되어 있다.
US-ASCII를 사용해왔는데 글로벌로 쓰이기에는 역부족이다.
안전하지 않은 문자를 %로 시작해 hex 문자열로 이스케이프하게 바꾼다.
어떤 문자는 URL내에서 특별한 의미라서 인코딩되어야한다.
% / . .. # ? : ; $ + @ <> " 0x00 0x7F등등
스킴은 많다!
http
https
file
telnet
ftp
URL은 완벽하지 않다. 사실 주소이지 실제 이름은 아니다.
이러면 리소스가 옮겨지면 그 URL을 더이상 사용할 수 없다는 뜻이다.
이런문제를 해결하려면 객체의 위치와 상관없이 그 객체를 가리키는 실제 객체의 이름을 사용하는 것이다.
이게 바로 URN이다.
URN이 아직 널리퍼지지 않은이유는 주소체계를 바꾸는 것 자체가 매우 큰 작업이고 합의도 필요하기 때문에 아직도 오래걸릴것이다.