본문 바로가기
Concepts/HTTP

URL과 리소스

by ocwokocw 2024. 7. 1.

- 출처: HTTP 절대 가이드

 

- URI

URI는 인터네의 리소스를 가리키는 표준 이름이다. URI 에는 URL과 URN 이 있다.

  • URL: 어디있는지 설명해서 리소스를 식별
  • URN: 어디에 존재하는지는 상관없이 이름으로 식별

만약 http://joes-hardware.com/seasonal/index-fall.html 과 같은 URL이 있다면  아래와 같이 나눌 수 있다.

  • http: URL의 스킴
  • joes-hardware.com: 서버의 위치
  • /seasonal/index-fall.html: 리소스의 경로

- URL 의 문법

대부분의 스킴은 일반 URL의 문법을 따르며, 서로 다른 URL 스킴도 형태와 문법이 비슷하다. URL의 기본 문법은  "scheme://ID:PW@host:port/path;param?query#fragment" 이다.

  • ID:PW: 주로 FTP 스킴의 URI에 접근하는 경우 많이 볼 수 있다. 하지만 HTTP 스킴의 경우에도 회사의 자원 같이 허용된 사용자만 접근하도록 제한하는 경우라면(ex - GIT PAT token) 종종 볼 기회가 있을것이다.
  • param: 사실 많이 볼 기회는 없지만 리소스에 접근할 때 path 정보만으로 부족할 때가 있는데 param 이라는 추가 정보를 전달할 수 있다. 예를 들어 FTP 특정 자원이 binary와 text 형식을 모두 지원한다고 가정해보자. 이때 binary 형식으로 접근하길 원한다면 ftp://prep.ai.mit.edu/pub/gnu;type=d 처럼 ; 뒤에 추가적인 param을 전달한다.
  • fragment: fragment 구성요소는 종종 본적이 있을것이다. 원래 HTLM 리소스는 더 작은 단위로 쪼갤 수 있다. 대표적인 예가 HTML 문서에서 특정 절을 가리키는것이다. https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#the-components-of-github-actions 이 URL은 github action 에 관련된 문서에서도 the-components-of-github-actions 라는 특정 절을 가리킨다. fragment는 서버에서 지원하는 리소스 단위라기 보다는 browser 가 우선 전체 리소스를 다운로드 받고나서 fragment 로 이동하는 방식으로 동작하게 된다.

- 단축 URL

URL 에는 상대 URL과 절대 URL이 존재한다. 여태까지는 절대 URL 만을 봤었다. 사실 HTML 을 작성하지 않으면 상대 URL을 볼 기회가 많지는 않다.

 

만약 HTML 의 link 같은 태그 내에서 ./hammers.html 과 같이 기술하면 http://www.joes-hardware.com/tools.html 의 기저(Base) URL을 기반으로 browser가 http://www.joes-hardware.com/hammers.html 과 같은 절대 URL을 만들어 낸다. browser는 상대 URL <-> 절대 URL의 상호 변환 지원을 필수적으로 해야한다.


- URL Encoding

초기에 URL은 US-ASC 문자 집합을 사용했었다. 하지만 이를 벗어난 문자에 대한 요구가 점점 커졌고, 이를 위해 이스케이스 문자를 지원하게 되었다.

 

encodeURI("https://naver.com/image has a space.jpg")

'https://naver.com/image%20has%20a%20space.jpg'

 

크롬에서 F12로 개발자 도구를 켜고 콘솔에 encodeURI로 공백이 포함된 url 을 입력하면 공백 문자가 %20 으로 치환된 결과를 확인할 수 있다. 이렇게 알파벳이 아닌 문자(안전하지 않은 문자)의 경우 % 뒤에 16진수 2자리가 붙어서 인코딩이 되게 된다.

'Concepts > HTTP' 카테고리의 다른 글

HTTP 메시지  (0) 2024.07.07
HTTP 개요  (0) 2024.06.30

댓글