HTTP 요청 대상을 "리소스"라고 부르는데, 그에 대한 본질을 이 이상으로 정의할 수 없습니다; 그것은 문서, 사진, 그 외에 무엇이든 될 수 있습니다. 각각의 리소스는 리소스 식별을 위해 HTTP 도처에서 두루 사용되는 Uniform Resource Identifier (URI)에 의해 식별됩니다.
웹에서 리소스에 대한 식별과 위치는 대부분 단일 URL(URI의 한 종류)로 제공됩니다. 그러나 이따금씩 식별과 위치가 동일한 URI로 제공되지 않는데에는 이유가 있습니다: 요청된 리소스에 대해 클라이언트가 다른 위치에서 접근하도록 해야 할 경우, HTTP는 특정 HTTP 헤더인 Alt-Svc
을 사용합니다.
URLs 그리고 URNs
URLs
URI의 가장 일반적인 형식은 Uniform Resource Locator (URL)로 웹 주소라고 알려져 있습니다.
https://developer.mozilla.org https://developer.mozilla.org/en-US/docs/Learn/ https://developer.mozilla.org/en-US/search?q=URL
그런 URL들은 어떤 것이든 그와 연관된 페이지(리소스) 로드를 요청하기 위해 당신의 브라우저 주소 바에 입력될 수 있습니다.
하나의 URL은 서로 다른 파트들로 구성되며, 어떤 것은 필수적이고 그 외에는 부수적인 것들입니다. 다음은 좀 더 복잡해보이는 예제입니다:
https://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument
URNs
URN은 개별적인 네임스페이스 내에서 이름에 의해 리소스를 식별하는 URI를 말합니다.
urn:isbn:9780141036144 urn:ietf:rfc:7230
위 두 개의 URN은 다음 내용을 나타냅니다
- George Orwell이 쓴 1984년이라는 책
- IETF 스펙 문서 7230, Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing.
Uniform Resource Identifiers (URIs)의 문법
스킴 혹은 프로토콜
https://
은 프로토콜입니다. 브라우저가 사용해야만 하는 프로토콜이 어떤 것인지를 가리킵니다. 보통 그것은 HTTP 프로토콜이거나 혹은 보안이 적용된 버전인 HTTPS일 겁니다. 웹은 이들 중 하나를 반드시 필요로 하지만, 브라우저들은mailto:
(메일 클라이언트를 열기 위해) 혹은 파일 전송을 다루기 위한ftp:
와 같은 다른 프로토콜도 다루는 방법을 알고 있을 겁니다. 그러니 그런 프로토콜들을 보게 되더라도 놀라지마세요. 일반적인 스킴은 다음과 같습니다:
설명 | 설명 |
---|---|
data | 데이터 URIs |
file | 호스트가 지정하는 파일 이름들 |
ftp | 파일 전송 프로토콜 |
http/https | 하이퍼텍스트 전송 프로토콜 (보안) |
mailto | 전자 메일 주소 |
ssh | 보안 쉘 |
tel | 전화번호 |
urn | Uniform Resource Names |
view-source | 리소스의 소스 코드 |
ws/wss | (암호화된) 웹소켓 연결 |
도메인 이름(Authority)
www.example.com
는 네임스페이스를 관리하는 도메인 이름 혹은 authority입니다. 그것은 어떤 웹 서버가 요청을 받게 되는지를 가리킵니다. 그 대신에, IP address를 직접 사용할 수도 있지만, 불편한 관계로 웹에서 그리 자주 사용되지는 않습니다.
포트
- 이 예제에서
:80
는 포트를 말합니다. 그것은 웹 서버 상의 리소스에 접근하는데 사용되는 기술적인 "문"을 가르킵니다. 리소스에 접근하기 위한 권한을 얻기 위해 웹 서버가 HTTP 프로토콜의 표준 포트(HTTP는 80, HTTPS는 443)를 사용하는 경우 일반적으로 생략됩니다. 그게 아니라면 포트 입력은 필수입니다.
경로
/path/to/myfile.html
는 웹 서버 상의 리소스로 향하는 경로입니다. 웹의 초창기에, 이와 같은 경로는 웹 서버 상에 있는 파일의 물리적인 위치를 나타냈었습니다. 오늘날에는, 대부분 물리적인 실제 위치를 사용하지 않고 웹 서버에 의해 다뤄지는 추상화를 사용합니다.
쿼리
?key1=value1&key2=value2
는 웹 서버에 제공되는 추가적인 파라메터입니다. 이런 파라메터들은&
심볼로 구분되는 키/값 쌍의 목록입니다. 웹 서버는 리소스를 사용자에게 반환하기 이전에 무언가 추가적인 작업을 하기 위해 이 파라메터들을 사용할 수 있습니다. 각각의 웹 서버는 파라메터들을 따르는 자신만의 규칙을 가지며, 특정 웹서버가 파라메터들을 다루는 방식을 알기 위한 신뢰할 수 있는 유일한 방법은 웹 서버 소유자에게 요청하는 것입니다.
프래그먼트
#SomewhereInTheDocument
는 리소스 자체의 다른 부분을 가리키는 앵커입니다. 앵커는 리소스 내에서의 "북마크"의 한 종류를 나타내며, 브라우저에게 그런 "북마크된" 스팟에 위치한 컨텐츠를 보여주기 위한 방편을 제공합니다. 예를 들자면, HTML 문서 상에서, 브라우저는 앵커가 정의된 지점으로 스크롤될 것입니다; 비디오 혹은 오디오 문서에서, 브라우저는 앵커가 나타내는 시점으로 이동하려고 할 겁니다. 프래그먼트 식별자로 알려져 있기도 한, # 뒤의 부분은 요청과 함께 서버에 전달되지 않는다는 것을 알아두어야 합니다.
예제
https://developer.mozilla.org/en-US/docs/Learn tel:+1-816-555-1212 [email protected]:mdn/browser-compat-data.git ftp://example.org/resource.txt urn:isbn:9780141036144
명세
Specification | Title |
---|---|
RFC 7230, section 2.7: Uniform Resource Identifiers | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing |