Developer/web

URL 문법

hadaney 2020. 6. 7. 21:38

URL 문법을 통해 URL이 리소스의 위치를 어떠한 방식으로 가리키는지 알아보자

해당 내용은 'Http 완벽 가이드'라는 책을 바탕으로 기술하였다.

 

URL 문법

URL문법은 스킴(요청/응답에 사용할 프로토콜)에 따라 달라지지만, 대부분 9개의 부분으로 나누어진다.

 

<스킴>://<사용자이름>:<비밀번호>@<호스트명IP>:<포트번호>/<경로>;<파라미터>?<질의>#<프래그먼트>

각 컴포넌트를 하나씩 짚어보고, 스킴마다 어떻게 문법이 다른지도 확인해보도록 하자

 

1) 스킴 

어떤 프로토콜을 사용하여 서버에 접근할 것인가를 나타냄.

스킴은 가장 유명한 http부터 https, mailto, ftp, rtsp, rtspu, file, news, telnet 등이 대표적이다.

 

2) 사용자이름:비밀번호

서버 또는 서버의 특정한 리소스에 접근하기 위해서는 접근이 허용된 사용자명과 비밀번호가 필요하다. ftp프로토콜에서 흔히 볼 수 있다.

 

3) 호스트명:포트

호스트명 또는 IP주소를 표기하여 어떤 웹 서버에 자료인지, 그리고 해당 자료를 호스팅하는 서버가 열어놓은 포트가 무엇인지 표기한다. 사용자이름과 비밀번호가 있다면, @를 통해 구분한다

 

4) /경로

/을 통해 이전 컴포넌트와 구분되며 경로는 계층적인 폴더구조처럼 세그먼트로 나눌 수 있다. 경로에 대한 표기법은 서버와 스킴에 따라 다르다

 

5) ;파라미터

웹 어플리케이션이 서버에 해당 위치에서 어떠한 정보를 요하는지 정확한 정보를 나타내기 위해 필요한 입력파라미터로, 이름/값 쌍의 리스트로 ;이름=값;이름=값 ... 과 같이 나열될 수 있으며, 각 경로조각마다 자체 파라미터를 가질 수 있다. -> http://ww.hadaney_good.com/index.html;param1=True/intro.html;param2='comeon' 

 

6) ?질의

요청받은 리소스의 범위를 좁히기 위해 질의문을 받는다(데이터베이스 쿼리를 생각하면 된다). 경로와 파라미터 뒤에 ? 구부자로 시작하여 여러개의 질의를 &로 통해 연결하여 명시한다.

 

7) #프래그먼트

웹서버로부터 받은 리소스 내의 특정 조각을 가리키도록 명시하는 컴포넌트다.

조금 생소할 수도 있는데 프래그먼트를 명시하면 웹서버에서는 이를 처리하지 않지만, 브라우저가 웹서버의 결과를 받은 후에 명시된 프래그먼트로 시작하는 html 페이지로 스크롤을 옮긴다.


예시도 몇개 살펴보자

1) http스킴의 경우, (https 스킴도 문법이 같다)

http://<호스트명>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>

예시) http://www.hadaney_good.com/check_data.html?label='OK'

 

2) ftp스킴의 경우,

ftp://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>

ftp://anonymous:ha.lee@IEUser@check.ai.file.to:21/data/files

 

3) rstp, rstpu 스킴의 경우, (비디오와 같은 실시간 스트리밍에 쓰인다)

rtsp://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>

rtsp://www.streaming_lee.com:554/interview/ha_video


끝으로 URL은 상대경로처럼 상대 URL을 해석하여 자동으로 절대 URL로 변환될 수 있으며,

URL에서 허용하는 문자 집합은 US-ASCⅡ로 7비트로 표현되는 알파벳 대부분과 특수문자 일부들이다.

US-ASCⅡ로 표현되지 않는 문자들은 % 기호를 통해 16비트의 ASCⅡ코드 '이스케이프'문자로 바꾸어 나타낼 수 있다.

이렇게 적은 7비트의 코드를 통해 URL을 표시하는 이유는

안전한 문자들로만 인코딩하여 다양한 애플리케이션에서(어떤 나라의 애플리케이션이든) 올바르게 작동하기 위함이다.