CS/Network

HTTP: URL과 리소스

kkumta 2023. 2. 26. 23:55

도서 HTTP 완벽 가이드를 읽고 알게 된 지식을 정리한 글입니다.


URL의 정의

  • 리소스의 위치를 가리킨다.
  • URL을 통해 리소스를 찾고, 사용하고, 공유할 수 있다.
  • URI의 한 부분이다.

URL의 문법

스킴, 사용자 이름, 비밀번호, 호스트, 포트, 경로, 파라미터, 질의, 프래그먼트 컴포넌트가 있다.


스킴

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

 

특징

  • 알파벳으로 시작한다.
  • URL의 시작 부분이다. ':' 문자 이전까지이다.
  • 대소문자를 구분하지 않는다.

 

스킴별 특징

스킴 특징
http HTTP용 스킴
기본 포트 값: 80
형식: http://<호스트>:<포트>/<경로>?<질의>#<프래그먼트>
예: http://github.com/kkumta/Time-Deal-Shop/blob/main/README.md
https HTTP 커넥션의 양 끝단에서 암호화를 위해 SSL을 사용한 스킴
기본 포트 값: 443
형식: https://<호스트>:<포트>/<경로>?<질의>#<프래그먼트>
예: https://github.com/kkumta/Time-Deal-Shop/blob/main/README.md
mailto 이메일 주소용 스킴으로, 표준 URL과는 다른 포맷을 가진다.
형식: mailto: <RFC-522-addr-spec>
예: mailto:dasomchoi52@gmail.com
ftp 파일 전송용 프로토콜(FTP)용 스킴
형식: ftp://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>
예: ftp://anonymous:pwpw123@ftp.example.com:21/image;type=a
file 주어진 호스트 기기에서 바로 접근할 수 있는 파일을 나타낸다. 호스트가 생략되어 있으면 로컬 호스트가 기본이 된다.
형식: file://<호스트>/<경로>
예: file://C:/abcde.pdf

 


호스트와 포트

  • 호스트: 접근하려고 하는 리소스를 가지고 있는 인터넷상의 호스트 장비를 가리킨다. 호스트 명(www.naver.com)이나 IP 주소(125.209.222.141)로서 제공한다.
  • 포트: 서버가 열어놓은 네트워크 포트를 가리킨다.

 


사용자 이름과 비밀번호

  • 어떤 서버는 데이터 접근을 허용하기 전에 사용자 이름과 비밀번호를 요구한다.
  • 사용자 이름과 비밀번호를 기술하지 않고 FTP URL에 접근하면, 기본 사용자 이름으로 'anonymous', 비밀번호로 브라우저마다 가지고 있는 기본값을 사용한다.
  • 사용자 이름과 비밀번호는 '@' 문자 이전에 기술되고, 사용자 이름과 비밀번호는 ':' 문자로 구분된다. 

 


경로

  • 리소스가 서버의 어디에 있는지 알려 준다.
  • '/' 문자를 기준으로 경로조각으로 나뉘며, 각 경로조각은 각각의 파라미터를 가질 수 있다.

 


파라미터

  • 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는 데 사용한다.
  • 이름/값 쌍의 리스트로 ';' 문자로 구분된다.
  • 이를 통해 리소스에 접근하는 데 필요한 어떤 추가 정보든 전달할 수 있다.
  • 각 경로조각마다 가질 수 있다.

 


질의 문자열

  • 데이터베이스를 사용하는 서비스에서 사용한다.
  • 요청받을 리소스의 범위를 줄이기 위해 사용한다.
  • 편의상 많은 게이트웨이가 '&'로 나뉜 '이름=값' 쌍 형식의 질의 문자열을 사용한다.

 


프래그먼트

  • HTML, MD 같은 리소스 형식들은 더 작게 나뉠 수 있다. 즉, 한 리소스 안의 특정 부분을 가리킬 수 있다.
  • 프래그먼트는 URL이 리소스 내의 특정 부분을 가리킬 수 있도록 한다.
  • URL의 가장 오른쪽에 '#' 문자 이후에 온다.
  • HTTP 서버는 객체 중 일부가 아닌 객체 전부를 한 번에 다루기 때문에, 클라이언트는 서버에 프래그먼트를 전달하지 않는다. 브라우저는 서버로부터 전체 리소스를 내려받은 후, 프래그먼트 정보를 사용해서 사용자가 보고자 하는 리소스의 특정 부분을 보여준다.

절대 URL과 상대 URL

절대 URL 리소스에 접근하는 데 필요한 모든 정보를 담고 있다.
상대 URL - URL을 짧게 표기하는 방식이다.
- 리소스에 접근하는 데 필요한 모든 정보를 담고 있지 않으므로, 기저 URL을 사용한다.
- HTML을 작성하는 것을 기준으로 했을 때, URL에 스킴, 호스트 등을 작성하지 않아도 된다. 작성되지 않은 정보는 기저 URL에서 가져온다.
- URL의 일부 또는 프래그먼트이다. 

URL 확장

브라우저가 URL을 입력한 다음이나 입력하고 있는 동안에 자동으로 URL을 확장하는 것

호스트 명 확장

  • 입력한 호스트 명을 전체 호스트 명으로 확장한다.
  • 예를 들어, 주소 입력란에 'naver'를 입력하면 브라우저가 호스트 명으로 자동으로 'www.naver.com'을 만드는 것이다.
  • 프락시와 같은 다른 HTTP 애플리케이션에 문제를 발생시킬 수 있다.

 

히스토리 확장

  • 과거에 사용자가 입력했던 URL 기록을 저장해두는 것이다.
  • URL을 입력하면, 그 입력된 URL의 앞 글자들을 포함하는 완결된 형태의 URL들을 선택하게 해 준다.
  • 프락시를 사용할 경우 다르게 동작할 수 있다.

안전하지 않은 문자

URL 설계자가 사람들이 URL에 안전하지 않은 문자를 포함하려고 할 때가 있다는 것을 알게 된다.

-> 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 한다.

 

인코딩

안전하지 않은 문자를 이스케이프 문자로 바꾼다. 옥텟 단위로 묶어서, 16진수 값으로 인코딩한다.

이스케이프 문자는 '%' + 아스키 코드로 표현되는 두 개의 16진수 숫자로 구성된다.

 

본래의 목적이 아닌 용도로 사용하기 위해 무조건 인코딩해야 하는 문자 모음

문자 이유
% 인코딩된 문자에 사용할 이스케이프 토큰으로 선점
/ 경로 컴포넌트에 있는 경로 세그먼트를 나누는 용도로 선점
. .. 경로 컴포넌트에서 선점
# 프래그먼트의 구획 문자로 선점
? 질의 문자열의 구획 문자로 선점
; 파라미터의 구획 문자로 선점
: 스킴, 사용자 이름/비밀번호, 호스트/포트의 구획 문자로 선점
$ , + 선점
@ & = 특정 스킴에서 특별한 의미가 있다.
{ } | \ · ~ [ ] ` 여러 전송 에이전트에서 불안전하게 다루기 때문에 안전하지 않다.
< > " URL 범위 밖에서 역할이 있는 문자이기 때문에 안전하지 않다.

'CS > Network' 카테고리의 다른 글

HTTP: 웹 서버  (0) 2023.03.13
HTTP: HTTP 메시지  (0) 2023.03.06
HTTP: HTTP 개관  (0) 2023.02.22
쿠키와 세션, 그리고 JWT  (0) 2022.11.07
네트워크: 주소창에 특정 URL을 입력하면 일어나는 일  (0) 2022.07.14