[CH2] URL과 리소스

소포카·2022년 7월 4일
post-thumbnail

URL이란?

URL(Uniform Resource Locator)은 인터넷의 리소스를 가리키는 표준 이름이다.

  • URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리키며,
  • URL을 이용해 사람과 어플리케이션이 인터넷 상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있다.
  • URL을 통해 사람이 HTTP 및 다른 프로토콜을 통해 접근할 수 있다.

URL을 사용하면 리소스를 일관된 방식으로 지칭할 수 있다.

대부분의 URL은 동일하게 스킴://서버위치/경로 구조로 이루어져 있다.

URL와 URN

통합 자원 식별자(URI)란 서버 리소스의 이름이다. 웹 서버 리소스는 각자 이름을 갖고 있고, 클라이언트는 특정 리소스에 URI를 통해 접근할 수 있다. URI는 URL과 URN으로 구성되어 있다.

URL(uniform resource locator)

통합 자원 지시자(URL)는 특정 서버의 한 리소스에 대한 구체적인 위치를 서술한다.

대부분의 URL은 세 부분으로 이루어진 표준 포맷을 따른다.

  1. 스킴(scheme): 리소스에 접근하기 위해 사용되는 프로토콜
  2. 서버의 인터넷 주소
  3. 웹 서버의 리소스

URN(uniform resource name)

통합 자원 이름은 특정 리소스에 대해 위치에 영향 받지 않는 유일무이한 이름을 뜻한다. 리소스의 위치가 변하더라도 URN은 정상 동작한다. 하지만 리소스 위치를 분석하기 위한 인프라의 부재로 아직까지 많이 사용되지는 않는다.


URL의 구성

  • 모든 리소스들은 다른 스킴을 통해 접근할 수 있으며, URL 문법은 스킴에 따라 달라진다.
  • 대부분의 URL은 일반 URL 문법을 따른다.
  • URL 스킴의 문법은 일반적으로 9개 부분으로 나뉜다.
<scheme>://<user_name>:<password>@<host>:<port>/<path>;<parameter>?<query>#<fragment>

스킴

"https:"//velog.io/@tjdqls1668/http-study-2
  • 주어진 리소스에 어떻게 접근하는지 알려주는 정보
  • URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용해 리소스를 요청하는지 알려준다.
  • 첫번째 구분자로 :를 사용한다.
  • 대소문자를 가리지 않는다.

대표적인 스킴

스킴설명
http일반 URL 포맷을 지키는 http 스킴이다.
- 포트 기본값은 80이다.

기본 형식: http://<host>:<port>/<path>?<query>#<fragment>
httpshttp 스킴과 거의 같다.
다만 차이점은 HTTP 커넥션 양 끝단에서 암호화를 위해 SSL을 사용한다는 것이다.
- 포트 기본값은 443이다.

기본 형식: https://<host>:<port>/<path>?<query>#<fragment>
mailtomailto URL은 이메일 주소를 가리킨다.
- 이메일은 다른 스킴과는 다르게 동작한다.
- mailto URL은 표준 URL과 다른 포맷을 가진다.
- 인터넷 이메일 주소의 문법은 RFC 822에 기재되어 있다.

기본 형식: mailto:<RFC-822-addr-spec>
ftpFTP 서버에 있는 파일을 내려받거나 올리고,
FTP 서버의 디렉터리에 있는 콘텐츠 목록을 가져오는데 사용한다.
- FTP는 웹과 URL이 출현하기 전부터 있었다.
- 웹 애플리케이션은 데이터에 접근하는 용도의 스킴으로 FTP를 사용한다.

기본 형식: ftp://<user_name>:<password>@<host>:<port>/<path>;<parameter>
rtsp, rtspu실시간 스트리밍 프로토콜이라는 뜻
- 오디오 및 비디오와 같은 미디어 리소스 식별자이다.
- rtspu의 u는 UDP를 뜻한다.

기본 형식: rtsp(u)://<user_name>:<password>@<host>:<port>/<path>
file주어진 호스트 기기에서 바로 접근할 수 있는 파일들을 나타낸다.
- 각 필드는 일반적인 URL 포맷을 따른다.
- 호스트가 생략되어 있으면 기기의 로컬 호스트가 기본값이 된다.

기본 형식: file://<host>/<path>
telnet대화형 서비스에 접근하는데 사용한다.
telnet URL 자체가 객체를 가리키지는 않지만
리소스라고 할 수 있는 대화형 애플리케이션은 telnet 프로토콜을 통해 접근 가능하다.

기본 형식: telnet://<user_name>:<password>@<host>:<port>/

사용자 정보 (이름과 비밀번호)

기본값

  • 사용자 이름: anonymous
  • 비밀번호: chrome@example.com (chrome)
  • 많은 서버가 자신이 가지고 있는 데이터에 접근을 허용하기 전에
    사용자 이름과 비밀번호를 요구한다.
  • 그 예시로 FTP 서버가 있다.
# 1. 사용자 이름이나 비밀번호 값이 없다면 기본값을 사용
ftp://ftp.prep.ai.mit.edu/pub/gnu
# == ftp://anonymous:chrome@ftp.prep.~~

# 2. @ 문자로 url에서 사용자 정보(사용자 이름, 비밀번호) 분리
ftp://**anonymous**@ftp.prep.ai.mit.edu/pub/gnu

# 3. : 문자로 사용자 이름, 비밀번호 분리
ftp//**anonymous:my_passwor**d@ftp.prep.ai.mit.edu/pub/gnu

호스트와 포트

https://"velog.io:443"/@tjdqls1668/http-study-2
  • 애플리케이션이 인터넷에 있는 리소스를 찾으려면
  1. 리소스를 호스팅하고 있는 장비와
  2. 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지를 알아야 한다.

Host

  • 접근하려고 하는 리소스를 가지고 있는 인터넷상의 호스트 장비를 가리킨다.
  • 호스트명이나 IP 주소로 제공한다.

Port

  • 서버가 열어놓은 네트워크 포트를 가리킨다.
  • 내부적으로 TCP 프로토콜을 사용하는 HTTP는 기본 포트가 80이다. (https는 443)

경로

https://velog.io"/@tjdqls1668/http-study-2"
  • 리소스가 서버의 어디에 있는지 알려준다.
  • 계층적 파일 시스템 경로와 유사한 구조를 가진다.
  • HTTP RUL에서 경로 컴포넌트는 / 문자를 기준으로 경로조각으로 나뉜다.
  • 각 경로조각은 자체만으로 파라미터 컴포넌트를 가질 수 있다.

파라미터 (Matrix Params)

  • 많은 스킴이 객체에 대한 호스트 및 경로 정보만으로는 리소스를 찾지 못한다.
  • URL을 사용하는 애플리케이션이 리소스에 접근하려면 프로토콜 파라미터가 필요하다.
    → 프로토콜 파라미터가 없다면 응답 서버는 요청을 잘못 처리하거나 처리하지 않을 것이다.
  • URL 파라미터 컴포넌트는 애플리케이션이 서버에 정확한 요청을 하기 위해
    필요한 입력 파라미터를 받는데 사용한다.
  • 컴포넌트는 이름/값 쌍의 리스트로 URL 나머지 부분들로부터 ; 문자로 구분한다.
    → 이를 통해 애플리케이션이 리소스에 접근하는데 필요한 어떤 추가 정보든 전달할 수 있다.

쿼리 스트링과 차이점

이런 URL 형식을 Matrix parameter라고 부른다.
검색해보니 쿼리 스트링과의 차이점은 아래와 같다고 나왔다.

  • urls with query params won’t have their response cached by intermediaries/proxies (at present)쿼리 파라미터가 있는 URL은 현재 중개자/프록시에 의한 응답이 캐시되지 않는다.
  • matrix parameters may appear anywhere in path
    매트릭스 파라미터는 path의 어느 곳이든 표현될 수 있다.
  • calculating the relative uri is different
    상대 URI를 계산하는 것이 다르다.
  • query params are generally abused to add new verbs instead of using existing methods on resources
    쿼리 파라미터는 일반적으로 리소스에 기존 방법을 사용하는 대신
    새 동사를 추가하는데에 남용된다.
  • matrix parameters are not resources, they are aspects that help reference a resource in an information space that is difficult to represent within a hierarchy
    매트릭스 파라미터는 자원이 아니며, 정보 공간에서 계층 구조 내에서
    표현하기 어려운 자원을 참조하는 데 도움이 되는 상태입니다.

질의 문자열 (Query String)

https://github.com/Sophoca[?tab=repositories&q=&type=&language=&sort=name]
  • 데이터베이스 같은 서비스들은 요청 받을 리소스 형식의 범위를 좁히기 위해
    질문이나 질의를 받을 수 있다.
  • URL의 쿼리 컴포넌트는 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달한다.
    → 보통 게이트웨이는 다른 애플리케이션에 접근하려고 할 때 거치는 통로라고 할 수 있다.
  • 특정 문자를 제외하면 쿼리 컴포너틑 포맷에 제약사항은 없다.
  • 편의상 많은 게이트웨이가 & 문자로 나뉜 이름=값 쌍 형식의 쿼리 스트링을 원한다.

프래그먼트 (Fragment)

  • HTML 같은 리소스 형식은 본래 수준보다 더 작게 나뉠 수 있다.
  • 리소스의 특정 부분을 가리킬 수 있도록 URL은 프래그먼트 컴포넌트를 제공한다.
  • 일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에
    클라이언트는 서버에 프래그먼트를 전달하지 않는다.
  • 브라우저가 서버로부터 전체 리소스를 내려받은 후, 프로그먼트를 통해 리소스 일부를 보여준다.

단축 URL

웹 클라이언트는 몇몇 단축 URL을 인식하고 사용한다.

  1. 상대 URL은 리소스 안에 있는 리소스를 간결하게 기술하는데 사용할 수 있다.
  2. URL 일부를 입력하면 나머지 부분을 자동으로 입력해주는 URL 자동 확장을 지원한다.

상대 URL

URL은 2가지로 나뉜다.

  1. 상대 URL: 모든 정보를 담고 있지 않다.
  2. 절대 URL: 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.

상대 URL 문법에 따르면 HTML 작성자는 URL에 스킴, 호스트 그리고 다른 컴포넌트를 모두 입력하지 않아도 된다. 그러한 정보들은 컴포넌트가 포함된 리소스의 기저 URL에서 알아낼 수 있다.

  • 상대 URL은 fragment이거나 URL의 일부이다.
  • 브라우저 같은 애플리케이션은 상대 URL ↔ 절대 URL 간 상호 변환을 할 수 있어야 한다.

기저 URL

기저 URL은 상대 URL의 기준이 된다.

기저 URL을 가져오는 방법은 다음과 같다.

  1. 리소스에서 명시적으로 제공: <base> HTML 태그를 기술할 수 있다.
  2. 리소스를 포함하고 있는 기저 URL: 해당 리소스의 URL을 기저 URL로 쓸 수 있다.
  3. 기저 URL이 없는 경우: 불완전하거나 깨진 URL일 수 있다.

상대 참조 해석하기

상대 URL과 기저 URL을 각각의 컴포넌트 조각으로 나누는 것이다. (=URL 분해하기)

분해를 한 이후에는 다음 사진처럼 알고리즘을 사용해
상대 URL을 절대 URL 형태로 변환한다.

URL 확장

호스트명 확장

해당 기능을 지원하는 브라우저는 입력한 호스트 명을 전체 호스트 명으로 확장할 수 있다.

호스트명 확장 기능은

  1. 사용자의 시간을 절약하고 혼란을 막아준다.
  2. 프락시와 같은 다른 HTTP 애플리케이션에 문제를 발생시킬 수 있다.

히스토리 확장

과거에 사용자가 방문했던 URL의 기록을 저장해 놓는 것이다.

히스토리 확장 기능은

  1. 이전에 방문했던 URL 시작 부분을 입력하면 사용자는 나타난 목록에서 선택만 하면 된다.
  2. 프록시에서는 다르게 동작할 수 있기에 주의해야 한다.

Reference

profile
https://github.com/sophoca

0개의 댓글