Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2장] URL과 리소스 #3

Open
eunbc opened this issue Nov 13, 2023 · 6 comments
Open

[2장] URL과 리소스 #3

eunbc opened this issue Nov 13, 2023 · 6 comments
Labels

Comments

@eunbc
Copy link

eunbc commented Nov 13, 2023

No description provided.

@eunbc eunbc added the 2장 label Nov 13, 2023
@cloudwi cloudwi removed the 2장 label Nov 13, 2023
@eunbc eunbc added the 1주차 label Nov 13, 2023
@annahxxl
Copy link

인터넷의 리소스 탐색하기

  • URL을 이용해 인터넷상의 수십억 개의 리소스를 찾고 사용하며 공유할 수 있다
  • URI는 URL과 URN으로 구성된 종합적인 개념이다

URL 문법

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

스킴

  • 사용할 프로토콜

호스트와 포트

  • 호스트 컴포넌트는 호스트 명이나 IP 주소로 제공한다
  • 포트 컴포넌트는 서버가 열어놓은 네트워크 포트를 가리킨다

사용자 이름과 비밀번호

  • 애플리케이션이 FTP와 같이 사용자 이름과 비밀번호를 요구하는 URL 사용시, 그 값들이 비어있다면
    • 기본 사용자 이름 값으로 anonymous,
    • 비밀번호는 브라우저마다 가지고 있는 기본값을 사용한다

경로

  • 리소스가 서버의 어디에 있는지 알려준다
  • /문자를 기준으로 경로조각으로 나뉜다

파라미터

  • 애플리케이션이 리소스에 접근하는데 필요한 어떤 추가 정보든 전달할 수 있다
  • 키=값 형태로 파라미터를 전달한다
  • ; 문자로 구분하여 기술한다
  • 경로 조각 단위로 자체 파라미터를 가질 수 있다

질의 문자열

  • 리소스 형식의 범위를 좁히기 위해 사용한다
  • 경로 컴포넌트와 함께 전달하고 있다
  • &로 나뉜 키=값 쌍 형식이다

프래그먼트

  • URL은 HTML 문서에 있는 특정 이미지나 일부분을 가리킬 수 있다
  • URL 오른쪽에 # 문자에 이어서 온다
  • 일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다루기 때문에 클라이언트는 서버에 프래그먼트를 전달하지 않는다

단축 URL

상대 URL

  • URL은 상대 URL, 절대 URL 두 가지로 나뉜다
    • 절대 URL: 리소스에 접근하는데 필요한 모든 정보를 가지고 있다
    • 상대 URL: 리소스에 접근하는데 필요한 모든 정보를 얻기 위해서는, 기저(base)라고 하는 다른 URL을 사용해야한다
  • 상대 URL은 URL을 짧게 표기하는 방식이다

URL 확장

  • 어떤 브라우저들은 URL을 입력한 다음이나 입력하고 있는 동안에 자동으로 URL이 확장한다
  • 확장 기능은 두 가지로 나뉜다
    • 호스트 명 확장: 단순히 wwwcom을 붙여서 만든다
    • 히스토리 확장: 과거에 사용자가 방문했던 URL의 기록을 저장해 두고 입력값이 포함된 URL을 선택한다

안전하지 않은 문자

  • URL은 상대적으로 작고 일반적으로 안전한 알파벳 문자만 포함하도록 허락한다
  • 이스케이프라는 기능을 추가하여, 안전하지 않은 문자를 안전한 문자로 인코딩할 수 있게 하였다

미래

  • URL은 주소이지 실제 이름이 아니다

  • 리소스가 옮겨지면 URL을 더는 사용할 수 없다는 것이다

  • 이런 문제를 객체 위치와 상관없이, 그 객체를 가리키는 실제 객체의 이름을 사용하는 것으로 예방할 수 있다

  • PURL(지속 통합 자원 지시자)을 사용하면 URL로 URN 기능을 제공할 수 있다

  • PURL은 리소스의 실제 URL 목록을 관리하고 추적하는 리소스 위치 중개 서버를 두고, 해당 리소스를 우회적으로 제공한다

  • 아마도 URN 같은 것들이 나오고 적용될 것이다

@eunbc
Copy link
Author

eunbc commented Nov 15, 2023

[2장] URL과 리소스

인터넷의 리소스 탐색하기

  1. URL은 브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리킴
  2. 스킴(어떻게) 호스트(어디에) 경로(무엇을)
  3. 스킴://서버위치(호스트)/경로
  4. 하나의 인터페이스를 통해 일관된 방식으로 많은 리소스에 접근할 수 있다

URL 문법

<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
  • 스킴 : 사용할 프로토콜, 대소문자 구분 없음
  • 호스트와 포트 : 리소스에 접근할 수 있는 서버, 서버가 열어놓은 네트워크 포트
  • 사용자 이름과 비밀번호 : FTP의 경우 사용자 이름 기본값 anonymous, 비밀번호는 브라우저별 기본값
  • 경로 : /path/index.html, 계층적 파일 시스템 경로와 유사한 구조
  • 파라미터 : 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용한다. 이름/값 쌍의 리스트, ‘;’ 문자로 구분하여 기술한다. (Spring에서는 @MatrixVariable을 사용하나, 기본적으로 비활성화되어 있다고 함)
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
  • 질의 문자열 : 리소스 형식의 범위를 좁히기 위해 사용한다. ? 우측에 있는 값들로, ‘&’로 구분한다. (Spring의 @RequestParam 사용)
http://www.joes-hardware.com/inventory-check.cgi?item=1234&coloc=blue
  • 프래그먼트 : 리소스의 특정 부분을 가리키기 위해 사용한다. #문자에 이어서 온다. 브라우저가 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 리소스의 일부를 보여준다. 프래그먼트는 서버로 보내지 않는다.
http://www.joes-hardware.com/tools.html#drills

단축 URL

  1. 상대 URL : URL 을 짧게 표기하는 방식, 기저 URL을 간결하게 표기
  2. URL 확장 : 단순하게 입력한 문자를 www 이나 com을 붙여서 호스트 명을 확장하거나, 과거에 사용자가 방문했던 URL을 바탕으로 확장하여 사용자가 URL을 입력하는 시간을 줄임

안전하지 않은 문자

  • US-ASCII를 기본적으로 사용하며, ASCII이외의 문자를 다루기 위해 이스케이프 문자열을 사용한다.
  • 클라이언트 애플리케이션에서 안전하지 않거나 제한된 문자를 변환하는 것이 좋다
http://www.joes-hardware.com/%7Ejoe (0x7E)

스킴의 바다

  1. http, https, ftp, file, telnet 등등.. 스킴 별로 포맷이 다름

미래

  1. URL은 인터넷 프로토콜 간에 공유할 수 있는 일관된 작명 규칙을 제공한다
  2. 하지만 리소스가 옮겨지면 URL 을 사용할 수 없다는 단점이 있다
  3. 해결방법으로는 URN, PURL 이 있으나 주소 체계를 바꾸는건 매우 큰 작업이기 때문에 URL은 당분간 계속 사용될 것이다

@kimday0326
Copy link
Member

URL의 일반적인 구조

-> 스킴(프로토콜)://서버위치/경로

URL 문법

대부분의 URL 스킴 문법은 일반적으로 9개의 부분으로 나뉜다.

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

  1. 스킴
    어떤 프로토콜을 사용하여 리소스를 가져올지를 가리키며, 대소문자를 구분하지 않는다.

  2. 사용자 이름과 비밀번호
    FTP와 같은 프로토콜의 경우, 데이터 접근 허용을 위해 이름과 비밀번호를 요구한다. 후행 컴포넌트와 '@' 문자로 구별된다.

  3. 호스트와 포트
    호스트는 인터넷 상의 호스트 장비(IP주소 또는 도메인 네임)을 가리키고, 포트번호는 해당 호스트의 네트워크 포트(또는 프로세스)를 가리킨다.

  4. 경로
    이전 컴포넌트와 '/' 문자로 구분되며 서버에서 리소스의 정확한 위치를 나타낸다.

  5. 파라미터
    애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는 컴포넌트이다. 이전 컴포넌트와 ';' 문자로 구분되며 이름=값 쌍으로 이루어져있다.

  6. 질의 문자열
    요청받을 리소스 형식의 범위를 좁히기 위해 사용되는 부분. 이전 컴포넌트와 '?' 문자로 구분되며 '&' 문자로 이어진 1개 이상의 이름=값 쌍이 나열되어있다.

  7. 프래그먼트
    리소스는 본래의 형식보다 더 작게 나뉠 수 있다. 여기서 나뉜 특정 부분을 가리킬 수 있도록 제공되는 컴포넌트이다. 이전 컴포넌트와 '#' 을 통해 구분된다.

단축 URL

단축 URL은 리소스를 간결하게 기술하도록 도와준다. 아래는 단축 URL의 대표적인 예시이다.

상대 URL

기저(BASE) URL을 이용해 URL을 짧게 나타내는 방식이다. 기저 URL은, 현재 가리키고 있는 리소스의 위치이다.

예를 들어, http://www.helloWorld.com/hello.html 에 존재하는 hello.html 파일에서 "./world.html" 과 같은 상대 URL을 사용한다면, 이는 기저 URL로부터의 상대적 위치를 의미하므로 http://www.helloWorld.com/world.html 과 같이 해석된다.

URL 확장

이는 브라우저가 사용자를 위해 제공하는 기능으로, URL 전체를 입력하지 않도록 도와준다.

  1. 호스트명 확장
    yahoo 와 같은 호스트명을 www.yahoo.com 과 같이 바꿔주는, 휴리스탁만을 이용한 단순한 기능

  2. 히스토리 확장
    사용자의 기록을 저장했다가, 이전에 입력했던 URL의 시작부분을 입력하면 뒷부분을 보여주는 자동완성 기능

@park0jae
Copy link
Member

park0jae commented Nov 15, 2023

URL 컴포넌트


image

< 이미지 출처 : https://feel5ny.github.io/2019/08/09/HTTP_002/ >

<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
  • 스킴 : 리소스를 가져오기 위해 명시하는 프로토콜 ( = http, ftp .. 등)
  • 사용자 이름 : 몇몇 스킴은 리소스에 접근하기 위해 사용자 이름을 필요로 함
  • 비밀번호 : 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론(:)으로 이어서 기술한다.
  • 호스트 : 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소
  • 포트 : 리소스를 호스팅하는 서버가 열어놓은 포트 번호 (= HTTP 기본 포트 80)
  • 경로 : /로 구분, 서버 내 리소스의 위치를 가리킴
  • 파라미터 : 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용, 주로 리소스에 대한 일반적인 매개변수
  • 질의 : 스킴에서 애플리케이션에 파라미터를 전달하는데 쓰임 (= URL 끝에 ?) , 주로 웹 검색 또는 리소스의 필터링을 위해 쓰임
  • 프래그먼트 : 리소스의 조각이나 일부분을 가리키는 이름 (클라이언트에서만 사용, URL 끝에 ‘#’ 문자로 구분)

프래그먼트에 대해 좀 더 자세히 알아보기 !

<aside> 💡 특정 content의 위치를 가르키기 위한 값이며, 주로 긴 글에서 특정 문단을 가르키는 용도로 사용한다.

어떤 문서를 읽을 때, 목차에 있는 소제목을 누르면 해당 문단으로 스크롤 되는 경험이 있을 것이다.

한 페이지 안에서 원하는 곳으로 스크롤할 때 쓰인다고 한다.

</aside>

상대 URL

  • 절대 URL은 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.
  • 상대 URL은 기저(base)라고 하는 다른 URL을 사용하여 URL을 짧게 표현한다.
  • http://www.joes-hardware.com/tools.html → 기저(base) URL
...
<a href="./hammers.html">
...

위의 html 파일이 http://www.joes-hardware.com/tools.html가 가리키는 리소스인 HTML 문서의 내용을 보여준다고 하자.

해당 문서에는 ./hammers.html URL을 가리키는 하이퍼링크가 있다. 해당 URL은 미완성인 것 처럼 보이지만 문서의 URL을 기준으로 상대 경로로 해석될 수 있다.

—> http://www.joes-hardware.com/hammers.html

상대 URL을 절대 URL로 변환하기

  • 경로는 ./hammers.html 이고 기저 URL은 http://www.joes-hardware.com/tools.html
  • 스킴은 비어 있고, 알고리즘에 따라 기저 URL의 스킴을 상속 받는다.
  • 적어도 한 개의 컴포넌트는 비어 있지 않으며 , 호스트와 포트 컴포넌트를 상속 받는다.
  • 상대 URL 컴포넌트와 상속받은 컴포넌트(스킴, 호스트, 포트)를 합치면 새로운 절대 URL을 얻을 수 있다.

인코딩 체계

  • 안전한 문자 집합을 이용하는 경우 그 표현의 한계를 넘기 위해, URL에 있는 안전하지 않은 문자들을 표현할 수 있는 인코딩 방식이 고안되었다.
  • 인코딩은 안전하지 않은 문자를 퍼센티지 기호(%)로 시작해, ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 ‘이스케이프’ 문자로 바꾼다.

ex) ‘~’ —> http://www.joes-hardware.com/~joe

문자 제한

  • 몇몇 문자는 URL 내에서 특별한 의미로 예약되어 있다.
  • 따라서 본래 목적이 아닌 다른 용도로 사용하려면, 그 전에 반드시 인코딩해야 한다.
문자 선점 및 제한
% 인코딩 된 문자에 사용할 이스케피으 토큰으로 선점
/ 경로 컴포넌트에 있는 경로 세그먼트를 나누는 용도로 선점
. 경로 컴포넌트 선점
.. 경로 컴포넌트 선점

스킴 종류

  • 웹에서 쓰이는 일반 스킴들의 포맷에 대해 알아보자.
스킴 설명
http 사용자 이름이나 비밀번호가 없다는 것을 제외하고, 일반 URL 포맷을 지키는 하이퍼텍스트 전송 프로토콜, 포트 기본값은 80
https http 스킴과 거의 같고, HTTP 커넥션 양 끝단에서 암호화하기 위해 넷스케이프에서 개발한 보안 소켓 계층(Secure Sockets Layer, SSL)을 사용한다. 기본 포트값은 443
mailto URL은 이메일 주소를 가리킴
ftp 파일 전송 프로토콜
rtsp, rtspu 실시간 스트리밍 프로토콜
file 주어진 호스트 기기에 바로 접근할 수 있는 파일들을 나타냄
news 특정 문서나 뉴스 그룹에 접근하는데 사용
telnet 대화형 서비스에 접근하는데 사용

@byulcode
Copy link

파라미터 vs 질의 문자열

파라미터 (Matrix parameter)

  • URL의 파라미터 컴포넌트는 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용한다.
  • 특정 리소스에 대한 세부 정보나 속성을 나타내는 데 유용하.(& 리소스의 표현 확장)
https://example.com/resource**;**type=video;width=800

⇒ 표준적인 RESTful API 설계를 지원할 수 없으므로 자주 사용되지 않음.

질의 문자열 (Query String)

  • 데이터베이스 같은 서비스들은 요청을 받을 리소스 형식의 범위를 좁히기 위해 질문이나 질의를 받을 수 있다.
  • 항상 URL의 일부여야 한
  • 게이트웨이를 가리키는 정보를 URL의 경로 컴포넌트와 함께 전달하고있다. → ?
  • 주로 웹 애플리케이션에서 GET 요청에 매개변수를 전달하는데 사용된다 ex) 검색, 페이징 …
https://example.com/search?q=web+development&page=1

참조

https://feel5ny.github.io/2019/08/09/HTTP_002/

@cloudwi
Copy link
Contributor

cloudwi commented Nov 16, 2023

2장URL과 리소스

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

인터넷의 리소스 탐색하기

URL이 있기 전 암흑의 시대

URL 문법

스킴: 사용할 프로토콜

호스트와 포트

사용자 이름과 비밀번호

경로

파라미터

질의 문자열

프래그먼트

단축 URL

상대 URL

URL은 상대 URL과 절대 URL 두 가지로 나뉜다.

컴포넌트가 포함된 리소스의 기저 URL에서 알아낼 수 있다.

URL 확장

호스트 명 확장

‘yahoo’를 입력하면, 브라우저는 호스트 명에 자동으로 ‘www’와 ‘.com’을 붙여서 ‘www.yahoo.com’을 만든다.

안전하지 않은 문자

URL 문자 집합

인코딩 체계

문자 제한

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants