URL

URL(Uniform Resource Locator)은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리킨다.

리소스?
텍스트, 이미지, 동영상 같이 웹에서 사용되는 식별할 수 있는 모든 자원

URL은 URI(Uniform Resource Identifier, 통합 자원 식별자)라고 불리는 더 일반화된 부류의 부분 집합이다

대부분 '스킴://서버위치/경로' 구조의 일관된 방식으로 리소스를 가리키고 가져오기 위한 규칙이 있다.

  • URL의 첫 부분인 http는 URL의 스킴. 스킴은 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다. 위 이미지의 경우 HTTP 프로토콜을 사용한다.

  • 두번째 부분인 www.joes-hardware.com은 서버의 위치. 리소스가 어디에 호스팅 되어 있는지 알려준다.

  • /seasonal/index-fall.html 은 리소스의 경로. 서버에 존재하는 로컬 리소스들 중 요청받은 리소스가 무엇인지 알려준다.

URL은 HTTP 프로토콜이 아닌 다른 프로토콜을 사용할 수 있다.
예) president@whitehouse.gov - 이메일 주소,
ftp://ftp.lots-o-bools.com/pub/complete-price-list.xls - FTP(File Transfer Protocol)서버에 올라가 있는 파일

URL 문법

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

컴포넌트설명기본값
스킴리소스를 가져오려면 어떤 프로토콜을 사용해 서버에 접근해야 하는지를 가리킨다.없음
사용자 이름몇몇 스킴은 리소스에 접근하기 위해 사용자 이름을 필요로 한다.anonymous
비밀번호사용자의 비밀번호를 가리키며, 사용자 이름에 콜론으로 이어서 기술<이메일 주소>
호스트호스팅하는 서버의 호스트 명이나 IP주소없음
포트리소스를 호스팅하는 서버가 열어놓은 포트번호, 많은 스킴이 기본 포트를 가지고 있다(HTTP의 기본 포트는 80)스킴에 따라 다름
경로이전 컴포넌트와 '/'으로 구분하며 리소스가 어디에 있는지를 가리킨다.없음
파라미터특정 스킴에서 입력 파라미터를 기술하는 용도로 사용, 이름/값을 쌍으로 가진다. 세미콜론으로 구분해 여러 개를 가질 수 있다.없음
질의애플리케이션에서 파라미터를 전달하는데 쓰임. URL의 끝에 '?'로 구분없음
프래그먼트리소스의 조각이나 일부분을 가리키는 이름. URL이 특정 객체를 가리킬 경우 프래그먼트 필드는 서버에 전달되지 않는다. 클라이언트에서만 사용한다. URL 끝에 '#'으로 구분.없음

스킴: 사용할 프로토콜

URL을 해석하는 애플리케이션이 어떤 프로토콜을 사용해 리소스를 요청해야 하는지 알려준다.

  • 스킴은 알파벳으로 시작해야 하며 대소문자를 가리지 않음.
  • URL의 나머지 부분들과 콜론(:)으로 구분.

호스트와 포트

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

포트는 서버가 열어놓은 네트워크 포트를 가리킨다. TCP 프로토콜을 사용하는 HTTP는 기본 포트 80을 사용한다.

사용자 이름과 비밀번호

많은 서버가 자신이 가지고 있는 데이터에 접근릏 허용하기 전에 사용자 이름과 비밀번호를 요구한다.

ex) ftp 서버
1. ftp://ftp.prep.ai.mit.edu/pub/gnu
2. ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
3. ftp://anonymous:my_password@ftp.prep.ai.mit.edu/pub/gnu
4. http://joe:password@www.joes-hardware.com/sales_info.txt

1) 사용자 이름이나 비밀번호를 사용하는 URL스킴을 사용할 경우 그 값들이 없다면 기본 사용자 이름인 anonymous, 기본 비밀번호는 브라우저마다 가진 기본값을 사용한다.

2) 사용자 이름은 'anonymous', '@'를 써서 호스트명과 구분한다.

3) 사용자이름솨 비밀번호를 콜론으로 분리하여 기술한다.

경로

리소스가 서버의 어디에 있는지 알려주며 계층적 파일 시스템 경로와 유사한 구조를 가진다. '/' 문자를 기준으로 경로조각으로 나뉘며 각 경로조각은 자체 파라미터를 가질수 있다.

파라미터

URL의 파라미터 컴포넌트는 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용한다. 이 컴포넌트는 이름/값 쌍의 리스트로 URL 나머지 부분들로부터 세미콜론(;)문자로 구분하여 기술한다.

ftp://prep.ai.mit.edu/pub/gnu;type=d

위 경우 이름은 'type', 값은 'd' 라는 한 개의 파라미터를 전달한다.

HTTP URL에서의 경로 컴포넌트는 경로조각으로 나눌 수 있으며, 각 조각은 자체 파라미터를 가질 수 있다.

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

hammers는 값이 false인 sale 파라미터를 index.html은 값이 true인 graphics란 파라미터를 가진다.

💡 잘 사용되지 않는 형태인듯 하다.

질의 문자열(query string)

DB는 요청받을 리소스 형식의 범위를 좁히기 위해서 질문이나 질의를 받을 수 있다.

http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue

'?'로 구분하여 '&'로 나뉜 '이름=값'의 쌍 형식의 질의 문자열을 보낸다.

프래그먼트

리소스의 특정 부분을 가리킬 수 있도록 프래그먼트 컴포넌트를 제공한다.
URL의 오른쪽에 '#' 문자에 이어서 온다.

https://www.example.com/index.html#fragm

웹 서버에 위치한 /index.html 페이지내의 특정 부분을 가리킨다. 일반적으로 HTTP 서버는 객체 전체를 다루기 때문에 클라이언트는 서버에 프래그먼트를 전달하지 않는다.

단축 URL

상대 URL

URL은 상대 URL절대 URL로 나뉜다.

절대 URL은 리소스에 접근하는데 필요한 모든 정보를 가지고 있다. 반면 상대 URL은 모든 정보를 담고 있지 않으며, 상대 URL로 리소스에 접근하기 위해서는 기저(base) URL을 사용해야 한다.

<html>
  <head>
  ...
  </head>
  <body>
    <p>This is <a href="./exmaple.html">example</a></p>
  </body>
</html>

위 예제는 https://www.base.com/index.html 가 가리키는 리소스인 HTML 문서의 내용으로 해당 문서에 ./example.html URL을 가리키는 하이퍼링크가 있다. 이는 현재 문서의 URL을 기준으로 상대경로로 해석될 수 있다.

URL에 스킴과 호스트 등 다른 컴포넌트들을 입력하지 않아도 되며 그 정보들은 기저 URL에서 알 수 있다.

위 예제의 https://www.base.com/index.html URL을 기저 URL로 사용하여, 상대 URL에서는 기술하지 않은 스킴과 호스트를 추측한다.

새로운 절대 URL: https://www.base.com/example.com

URL 확장

브라우저들은 URL을 입력한 다음이나 입력하고 있는 동안 자동으로 URL을 확장한다. 이러한 확장 기능은 두 가지로 나뉜다.

  • 호스트 명 확장
    호스트 명 확장 기능을 지원하는 브라우저는 단순한 휴리스틱만을 사용해 입력한 호스트 명을 전체 호스트명으로 확장할 수 있다.

    예) 주소 입력란에 'yahoo'를 입력하면, 브라우저는 호스트 명에 자동으로 'www'와 '.com'을 붙여서 'www.yahoo.com'을 만든다. 혹은 'yahoo'란 단어를 포함한 사이트를 찾지 못하면 확장 기능을 포기하기 전 몇 가지의 URL을 추가로 제시한다.

    브라우저는 이런 간단한 기능을 제공하여 사용자의 시간을 절약하고 혼란을 막아주지만 프락시와 같은 다른 HTTP 앱에 문제를 유발하기도 한다.

  • 히스토리 확장
    브라우저는 URL을 입력하는 시간을 줄이고자 사용자가 방문했던 URL의 기록을 저장해 놓는다. URL을 입력하면, 입력된 URL의 앞 글자들을 포함하는 완결된 형태의 URL들을 선택하게 해준다.

프락시를 사용할 경우 URL 자동확장 기능은 다르게 동작할 수 있다.

안전하지 않은 문자

URL 설계자들은 모든 인터넷 프로토콜로 URL이 전송될 수 있기를 바랐고, 가독성도 있기를 바랐다. 따라서 출력이 되지 않거나 보이지 않는 문자를 사용할 수 있다고 해서 URL에 그런 문자들을 사용하는 것을 금한다.

또한 사람들이 URL에 이진 데이터나 일반적으로 안전한 알파벳 외의 문자도 포함하려고 할 때가 있어서 이스케이프라는 기능을 추가하여 안전한 문자로 인코딩할 수 있게 하였다.

스킴

웹에서 자주 쓰이는 스킴

스킴설명
http사용자 이름이나 비밀번호가 없는 일반 URL 포맷을 지키는 하이퍼텍스트 전송 프로토콜 스킴.
포트값이 생략되어 있고 기본값은 80
기본 형식: http://<호스트>:<포트>/<경로>?<쿼리>#<프래그먼트>
예: http://www.joes-hardware.com/index.html
https암호화하기 위해 보안 소켓 계층(Secure Sockets Layer, SSL)을 사용하는 점 외에 http 스킴과 거의 같다.
기본 포트값은 443.
기본 형식 https://<호스트>:<포트>/<경로>?<쿼리>#<프래그먼트>
예: http://www.joes-hardware.com/index.html
mailto  mailto URL은 이메일 주소를 가리킨다. 다른 스킴과는 다르게 동작하기 때문에 표준 URL과는 다른 포맷을 가진다.
기본 형식: mailto:< RFC-822-addr-spec >
예: joe@joes-hardware.com

등등

0개의 댓글