URL과 리소스에 대해서

dev stefanCho·2022년 2월 26일
0

http-definition-guide

목록 보기
1/3

URL(Uniform Resource Locator)는 브라우저에 입력하는 리소스(열고 싶은 어떤 파일같은것)의 주소를 의미합니다.
URL을 브라우저에 입력함으로써, 브라우저를 통해 파일을 접근할 수 있습니다.
URL은 특정컴포넌트의 조합으로 구성되어 있습니다.

URL 컴포넌트 구조

아래와 같은 형태를 지닙니다.

<scheme>://<username>:<password>@<host>:<port>/<path>;<params?<query>#<fragment>

이 컴포넌트들(<>로 된 각각을 의미)이 모두 필수는 아닙니다. (기본값이 있습니다.)
scheme, host정도가 필수 입니다.
그리고 path와 query는 상황에 따라 사용이 됩니다.

Scheme

사용할 프로토콜을 의미합니다.
http, https, mailto, ftp, file 등이 있습니다.

usernames, passwords

서버에서 데이터에 접근허용을 하기 위해서 사용자이름, 비밀번호를 요구하는 경우에 사용합니다.
예를들어, DB에 접근하는 경우 URL에 username과 password가 필요합니다.

host, port

host는 우리가 보통 사용하는 주소를 의미합니다.
https://www.google.com/ 에서 www.google.com이 host가 됩니다.
port는 http, https의 경우 default 값으로 80이 사용됩니다. 만약 80이 아니라면 명시를 해줘야합니다.

paths

서버에 접근했을때, 서버 시스템내에서 파일의 위치가 어디인지 알려줍니다.

parameters

간혹 서버에 정확한 요청을 학위해 입력파라미터가 필요할 수 있습니다. path는 params를 가질 수 있습니다. (각 path 뒤에 semicolon(;)dㅡㄹ 쓰고 key=value 형태로 사용함)
예를 들어 어떤 서버의 경로에 있는 파일은 특정파일요청에 대한것만 처리하고 싶을 수가 있습니다.(정확히 어떤경우인지는 모르겠지만)
저는 사실상 일반적인 주소에서 그리고 개발하면서도 사용하는걸 본적이 없습니다.

query strings

데이터베이스 같은 서비스들은 요청받을 리소스 형식을 줄이기 위해서 query string을 받을 수 있습니다.
key=value 형식으로 사용하고 여러개가 있다면 &를 사이에 붙여줍니다.

https://www.google.com/search?q=javascript

fragment

일반적으로 URL은 파일 1개를 가리킵니다. 하지만 fragment를 사용해서 파일내에서 특정위치까지 가리킬 수가 있습니다.
#fragment는 HTML파일내에서 특정위치를 알려주는 용도입니다. 그래서 fragment 부분은 서버에 전달되는 것이 아닙니다.
예를 들면 아래와 같은것이죠.

https://developer.mozilla.org/en-US/docs/Web/JavaScript#tutorials

URL 확장

단축 URL

url은 일부만 입력해도 자동으로 완성될 수 있습니다.
google.com을 주소창에 입력하면 앞에 www.가 자동으로 붙는 것이 있습니다.

히스토리 확장

브라우저는 url 히스토리를 저장하고 있습니다. 그래서 주소창에 url 일부만 입력하면 방문했던 url들을 선택할 수 있는 것입니다.

상대 URL

항상 절대 URL을 사용해야하는 것은 아닙니다. base URL을 알 수 있다면, 상대 URL로 path(포함) 뒷부분만 사용하기도 합니다.
예를 들어 HTML내에서는 아래와 같이 상대경로로 사용이 가능합니다. (HTML 작성자는 URL에 scheme, host 등의 컴포넌트를 입력하지 않아도 됩니다.)

<a href='./shops'>Shop으로 이동</a>

상대 URL을 사용하면 브라우저 내부적으로 URL파싱을 하게 됩니다. base URL과 상대 URL을 분해하고, 변환하는 알고리즘을 사용하게 되는 것입니다.
(TMI. 이 알고리즘은 RFC 1808에 최초로 기술되었고, 그 이후 RFC 2396에 포함되었습니다.)

문자 인코딩

escape 문자열

URL은 잘 호환되도록 설계되었습니다.
URL이 안전하게 전송되기 위해서는 안전하지 않은 문자를 안전한 문자로 Endcode할 필요가 있습니다.
역사적으로 많은 컴퓨터 App에서는 US-ASCII 문자집합을 사용해왔습니다.
이는 미국인들에게는 상당히 편리하지만 전세계인들의 많은 문자들을 지원하지는 않습니다.

이에 URL 설계자들은 URL에 escape 문자열을 사용할 수 있도록 설계하였습니다.
escape 문자열은 US-ASCII에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩할 수 있게 함으로써 이동성과 완성도를 높였습니다.

인코딩 체계

인코딩은 된 문자는 기본적으로 맨앞에 %, 그리고 16진수(0x00)형태로 변환됩니다.
예를 들면 URL에서 공백은 ASCII에서 32(0x20)입니다. 따라서 %20으로 변환됩니다. 여기서 %20을 esacpe 문자라고 부릅니다.

https://www.google.com/search?q=hello%20hi

문자 제한

URL에서는 사용이 제한된 문자들이 있습니다. 이런 문자들은 반드시 encode를 해야합니다.(escape 문자열로 만들어야합니다.)

마치며

URL은 리소스위치가 바뀌면 더는 사용할 수 없습니다. URL은 주소이지 실제이름이 아니기 때문입니다.
주소가 바뀌어도 상관없는 URN(Uniform Resource Name)을 사용할 수 있도록 준비되고 있습니다.
당장은 바뀌기 힘들겠지만 미래에는 URN이 URL을 대체할 수도 있습니다.

profile
Front-end Developer

0개의 댓글