URL과 URI
25 Mar 2020 | JavaURL과 URI
URI (Uniform Resource Identifier)
- 추상적이거나 또는 물리적인 자원을 완전히 완전히 구분할 수 있는 문자열
URL (Uniform Resource Locator)
- URI의 부분집합.
- URL + 자원이 어디에 위치하는 지 나타낸다
모든 URL은 URI이지만 역은 성립하지 않는다
예시
이름은 URI이지만, URL은 아니다. 이름을 안다고 해서 어디에 위치하는지 알 수 없기 때문이다.
반면 주소는 URI이면서 URL이다. 주소를 알면 내가 누군지 알 수 있으며, 어디에 위치하는지 또한 알 수 있기 때문이다
Syntax
모든 URI는 다음 형태를 가진다.
scheme: [//authority] [/path] [?query] [#fragment]
- scheme
- URL의 경우 이것은 자원에 접근하기 위한 프로토콜에 해당한다
- authority
- authority = [ userinfo “@” ] host [ “:” port ]
- 유저 권한정보(옵션), 호스트(필수), 포트(옵션)으로 구성된다
- path
- scheme와 authority에서 자원을 구별하는 역활을 한다
- query
- path 뒤에 오는 추가적인 정보로 자원을 구별하는 역활을 한다.
- fragment
- 특정 부분의 자원을 나타내는 옵션
URI, URL class in JAVA
URI 클래스만이 모든 syntax 구성요소에 대한 생성자를 가진다
@Test
public void whenCreatingURIs_thenSameInfo() throws Exception {
URI firstURI = new URI(
"somescheme://theuser:thepassword@someauthority:80"
+ "/some/path?thequery#somefragment");
URI secondURI = new URI(
"somescheme", "theuser:thepassword", "someuthority", 80,
"/some/path", "thequery", "somefragment");
assertEquals(firstURI.getScheme(), secondURI.getScheme());
assertEquals(firstURI.getPath(), secondURI.getPath());
}
@Test
public void whenCreatingURLs_thenSameInfo() throws Exception {
URL firstURL = new URL(
"http://theuser:thepassword@somehost:80"
+ "/path/to/file?thequery#somefragment");
URL secondURL = new URL("http", "somehost", 80, "/path/to/file");
assertEquals(firstURL.getHost(), secondURL.getHost());
assertEquals(firstURL.getPath(), secondURL.getPath());
}
ref. RFC 3986
ref. baeldung