#1. URI(Uniform Resource Identifier)
URI는 인터넷의 주소로, 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있다. URI에는 URL과 URN 2가지 종류가 있다.
URL은 특정 서버의 한 리소스에 대한 구체적인 위치를 기술한다.
URN은 리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할을 한다. 리소스가 이름을 변하지 않게 유지하는 한 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제없다.
오늘날 대부분의 URI는 URL이다.
#2. URL(Uniform Resource Location)
URL은 인터넷의 리소스(텍스트, 이미지, 동영상...)를 가르키는 표준이름이다. 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가르키며, URL을 통해 사람과 애플리케이션이 인터넷상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있게된다.
-
URL의 첫 부분인 https는 스킴(scheme)이다. 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다.
-
URL의 두 번째 부분 chaengstory.tistory.com은 서버의 위치이다. 웹 클라이언트가 리소스가 어디에 호스팅 되어 있는지 알려준다.
-
URL의 세 번째 부분 4?category=934911는 리소스의 경로이다. 서버에 있는 로컬 리소스들 중 요청받은 리소스가 무엇인지 알려준다.
URL은 "스킴://서버위치/경로" 구조로 이루어져 있다.
# 3. URL구조
대부분의 URL 스킴의 문법은 일반적으로 9개의 부분으로 나뉜다.
<스킴>://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
-
스킴 : 주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보이다. URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지 알려준다.
-
호스트와 포트 : 호스트 컴포넌트는 리소스에 접근할 수 있는 서버가 어디에 있는지 정보를 제공해 주는 역할을 한다. 호스트명이나 IP주소로 제공한다. 포트 컴포넌트는 서버가 열어놓은 네트워크 포트를 가르킨다. 내부적으로 TCP 프로토콜을 사용하는 HTTP는 기본 포트로 80을 사용한다.
-
사용자 이름과 비밀번호 : 애플리케이션이 FTP(File Transfer Protocol)와 같은 URL스킴을 사용한다면. 사용자 이름과 비밀번호를 요구한다. 기본 사용자 이름 값은 'anonymous' 비밀번호 값은 브라우저마다 가지고 있는 기본값을 사용한다.
-
경로 : 경로 컴포넌트는 리소스가 서버 어디에 있는지 알려준다. HTTP URL에서 컴포넌트 경로는 '/'문자를 사용하여 경로조각으로 나뉜다.
-
파라미터 : 파라미터 컴포넌트는 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용한다. 이름/값 쌍의 리스트로 URL 나머지 부분들로부터 ';' 문자로 구분하여 URL에 기술한다.
-
질의 문자열 : 쿼리 스트링(Query String)이라고도 하며 물음표(?)의 우측에 있는 값들을 질의 컴포넌트라고 부른다. 리소스 형식의 범위를 좁히기 위해 사용된다.
-
프래그먼트 : 프래그먼트 컴포넌트는 #문자 우측에 위치하며 리소스의 특정부분을 가리킬 경우에 사용된다. 일반적으로 HTTP서버는 객체 일부가 아닌 전체만 다루기 때문에 클라이언트는 서버에 프래그먼트를 전달하지 않는다. 브라우저가 서버로부터 전체 리소스를 내려받은 후 프래그먼트를 사용하여 보고자 하는 리소스의 일부를 보여준다.
# 4. URL 문자 집합
사람들은 URL에 이진데이터나 일반적으로 안전한 알파벳 외의 문자도 포함하려고 할 경우가 있고 이를 위해 이스케이프라는 기능을 추가하여 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 하였다.
인코딩은 안전하지 않은 문자를 퍼센티지(%) 기호로 시작해 ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 '이스케이프'문자로 바꾼다.
참고 자료
- HTTP완벽 가이드, 인사이트
'HTTP' 카테고리의 다른 글
[HTTP] 캐시(Cache) (0) | 2020.05.03 |
---|---|
[HTTP] 프락시(Proxy) (0) | 2020.05.02 |
[HTTP] 웹 서버 (0) | 2020.05.02 |
[HTTP] 커넥션 관리 (0) | 2020.05.01 |
[HTTP] HTTP메시지 (0) | 2020.04.30 |