URL, 리소스

ngh·2022년 11월 21일
0

HTTP

목록 보기
1/3

URL의 정의와 장점

URI, URL, URN, PURL

URI

  • 통합 자원 식별자 (Uniform Resource Identifier)
  • 인터넷 리소스를 가리키는 표준이름

URL

  • 리소스의 위치를 가리킨다.
  • URI의 부분집합
  • 대부분의 HTTP 애플리케이션은 URL을 URI의 한 부분으로 취급한다.

URN

  • URI의 부분집합
  • 리소스가 이동하더라도 똑같은 주소로 가리킨다.
  • 표준화 하기까지 오랜 시간이 걸리기 때문에 아직도 URL을 사용한다.

PURL

  • 리소스 위치 할당 서버를 통해 URL로 URN의 기능을 제공한다.

URL의 장점

URL이 있기전에는 특정 파일을 네트워크를 통해 얻으려고 하면 아래와 같은 방식이 필요했다.
1. ftp.hardware.com 에 FTP로 접속
2. 익명 사용자로 로그인
3. pub 디렉토리로 이동
4. 바이너리 형식으로 전환
5. catalog.xlx 파일을 로컬 파일 시스템에 다운로드

하지만, URL이 생긴 후에는 아래 요청으로 리소스를 가져올 수 있다.
1. ftp://ftp.hardware.com/pub/catalog.xls

URL 문법

URL 문법은 9개 부분으로 나뉜다.
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>

각 부분에 대해 설명하겠다.

스킴

스킴은 리소스에 접근하기 위해 사용하는 프로토콜을 정의한다.

스킴설명형식
http하이퍼 텍스트 전송 프로토콜, 포트 기본값: 80http://<호스트>:<포트>/<경로>?<질의>#<프래그먼트>
httpshttp의 커넥션 양 끝단에 SSL을 추가함, 포트 기본값: 443https://<호스트>:<포트>/<경로>?<질의>#<프래그먼트>
mailto이메일 주소mailto:< RFC-822-addr-spec >, ex)mailto :ngh@ngh-server.com
ftp파일 전송 프로토콜ftp://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>
rtsp,rtspu실시간 스트리밍 프로토콜rtsp://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>
file로컬 기기의 파일 주소file://<호스트>/<경로>
telnet대화형 서비스에 접근하는데 사용telnet://<사용자 이름>:<비밀번호>@<호스트>:<포트>/

사용자 이름, 비밀번호

ftp 같은 특정 프로토콜에서 요구하는 정보이다.
데이터 접근을 허용하기 위해 사용자의 이름과 비밀번호를 요구한다.
이름을 따로 설정하지 않는경우, anonymouse로 설정된다.
비밀번호를 따로 설정하지 않는경우, 브라우저마다 다른 기본값이 설정된다.

호스트, 포트

호스트는 리소스에 접근할수 있는 서버의 위치이다.
www.naver.com 같은 호스트 명 으로 사용할 수도 있고, 192.1.1.1 같은 IP로 사용할 수도 있다.
포트는 서버가 열어놓은 네트워크 포트이다.
HTTP는 기본적으로 80포트, HTTPS는 443포트를 사용한다.

경로

리소스가 서버의 어디에 있는지에 대한 정보이다.
계층적 파일 시스템과 비슷한 구조를 가진다.
/ 를 기준으로 경로를 나눈다.
각 경로는 자체 파마리터를 가질 수 있다.

파라미터

파라미터는 리소스를 가져올때, 특정 조건을 추가할 필요가 있는 경우에 사용한다.
예를들어, ftp에서 어떤 포맷으로 전송이 필요한지에 대한 정보를 파라미터로 받는다.
;로 분리된 key=value형태로 사용한다.

질의 문자열

리소스 형식의 범위를 좁히기 위해 사용한다.
예를들어, http로 아이템 번호가 10번인 상품을 조회하고자 할때 질의 문자열을 조건으로 넘겨준다.
?로 분리된 key=value 형태로 사용한다.

프래그먼트

리소스들의 특정 부분만을 보고싶을 때 사용한다.
서버에서 리소스를 잘라서 보내주지는 않고, 브라우저에서 전체 리소스들 받은 후에 특정 부분을 잘라서 보여준다.

단축 URL

상대 URL

상대경로로 리소스에 접근하는 방식이다.
http: //www.naver.com/main.html 에서 < a href="./news.html"> 태그로 이동시킬때 ./new.html부분을
상대 URL이라고 한다.

기저 URL

상대 URL 앞에 붙일 URL을 기저 URL이라고 한다.
기저 URL을 찾는 방법은 2가지가 있다.
1. 리소스에서 명시적으로 제공하는 경우 - HTML문서에서 <BASE> 태그로 기저 URL을 설정할 수 있다.
2. 기저 URL이 따로 정의되어있지 않다면, 상대 URL을 사용한 리소스의 URL이 기저 URL이다.
3. 위 2가지 경우에서 기저 URL이 없다면, 절대 URL을 사용했거나 URL이 깨진것이다.

상대 URL이 절대 URL로 합쳐지는 과정

조건: 상대 URL: ./news.html, 기저 URL: http: //www.naver.com/main.html
1. 상대 URL의 스킴이 비어있기 때문에 기저 URL의 스킴인 http를 가져온다.
2. 상대 URL의 컴포넌트가 비어있지 않기 때문에 기저 URL의 호스트, 포트를 가져온다.
3. 가져온 정보들을 상대 URL이랑 합치면 http ://www.naver.com/news.html 이 완성된다!

URL 확장

호스트명 확장

브라우저는 휴리스틱을 사용해서 호스트명을 완성시켜줄 수 있다.
예를들어, naver.com를 치면 www.naver.com을 완성시켜준다.

히스토리 확장

브라우저가 캐시에 사용자가 입력했던 URL 기록을 저장해 놓았다가
나중에 사용자가 비슷한 URL을 입력하면 자동완성시켜주는 기능이다.

안전하지 않은 문자

URL 에 사용하면 안되는 문자들이 있다.
역사적으로 컴퓨터 애플리케이션은 US-ASCII 문자를 사용했는데, US-ASCII 문자 집합은 문자의 수가 너무 적었다.
전 세계 사람들이 URL을 사용함에 따라, US-ASCII 문자열로 감당하지 못하는 부분들을 이스케이프 문자열로 지원하게 되었다.
ASCII에 없는 문자열을 사용하고자 하면, 해당 문자열을 %와 ASCII코드를 합친 이스케이프 문자를 사용해야 한다.

문자ASCII 코드이스케이프 문자
~126(0x7E)%7E
빈 문자32(0x20)%20
%37(0x25)%25

선점된 문자

특정 문자들은 예약어로 선점되어있거나 인쇄되지 않기 때문에, 사용하려면 이스케이프문자로 변경해야만 한다.

  • 반드시 이스케이프 문자로 변경해야만 하는 것들
    % / . .. # ? ; : $ , + @ & = { } | \ ~ [ ] < > " 0x00-0x1F 0x7F >0x7F

가끔 ~ 같은 문자를 인코딩하지 않고 사용해도 문제가 없는 경우가 있다.
하지만, 다른 애플리케이션과 통신할때 혼동을 피하기 위해 최초로 URL을 입력받은 애플리케이션이 반드시 인코딩을 하는 것이 좋다.

Reference

  • 데이빗 고울리, 브라이언 토티, 마조리 세이어, 세일루 레디, 안슈 아가왈, ⌜HTTP 완벽 가이드⌟, 756p
profile
Java/Kotlin Back-end Developer

0개의 댓글