URI란?
URI(Uniform Resource Identifier)
란 인터넷 자원을 나타내는 고유 식별자이다.
- Uniform : 리소스를 식별하는 통일된 방식
- Resource : 자원, URI로 식별할 수 있는 모든 것
- Identifier : 다른 항목과 구분하는데 필요한 정보
URI가 가장 포괄적인 개념으로, URL과 URN으로 나뉜다.
URL과 URN
URL(Uniform Resource Locator)
- Locator : 리소스가 있는 위치를 지정
- 해당 자원의 위치, Path를 의미한다.
- 일반적으로 사이트 도메인을 자주 의미
URN(Uniform Resource Name)
- Name : 리소스에 이름을 부여
- 해당 자원의 이름을 의미한다
- 독립적인 자원 지시자
- Page이후 부분까지 포함한다.
URI의 분석
예시 : https://www.google.com/search?q=hello&hl=ko
전체문법
scheme://[userinfo@]host[:port][/path][?query][#fragment]
→ https://www.google.com:443/search?q=hello&hl=ko
- 프로토콜(https)
- 호스트명(www.google.com)
- 포트 번호(443)
- 패스(/search)
- 쿼리 파라미터(q=hello&hl=ko)
스키마(Scheme)
scheme
://[userinfo@]host[:port][/path][?query][#fragment]
→ https
://www.google.com:443/search?q=hello&hl=ko
- 주로 프로토콜 사용
- 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙(http, https, ftp 등)
- http → 80번 포트, https → 443 주로 사용하며, 생략가능 하다.
- http에 보안을 추가하면 https이다
사용자 정보(Userinfo)
scheme://[userinfo@]
host[:port][/path][?query][#fragment]
→ https://www.google.com:443/search?q=hello&hl=ko
- URL에 사용자 정보를 포함해서 인증
- 거의 사용하지 않음 → email에 사용
호스트명(host)
scheme://[userinfo@]host
[:port][/path][?query][#fragment]
→ https://www.google.com
:443/search?q=hello&hl=ko
- 호스트명
- 도메인명 또는 IP 주소를 직접 사용가능하다.
포트(Port)
scheme://[userinfo@]host[:port]
[/path][?query][#fragment]
→ https://www.google.com`:443`/search?q=hello&hl=ko
- 접속하는 포트번호를 기입
- 일반적으로 생략하며, 생략시 http는 80, https는 443
패스(Path)
scheme://[userinfo@]host[:port][/path]
[?query][#fragment]
→ https://www.google.com:443`/search`?q=hello&hl=ko
- 리소스의 경로를 뜻하며, 계층적 구조로 되어 있다.
쿼리(Query)
scheme://[userinfo@]host[:port][/path][?query]
[#fragment]
→ https://www.google.com:443/search`?q=hello&hl=ko`
- key=value의 형태로 이루어진다.
- ?로 시작하며, &으로 파라미터의 갯수를 추가가능하다. (?keyA=valueA&keyB=valueB)
- 쿼리 파라미터, 쿼리 스트링 등으로 불린다.
- 웹서버에 제공하는 파라미터이며, 문자형태이다.
부분 식별자(fragment identifier)
- html 내부의 북마크 등에 사용되며, 서버에 전송하는 정보는 아니다.
- https://docs.spring.io/spring-boot/docs/current/reference/html/gettingstarted.html#getting-started-introducing-spring-boot
참고
https://www.howdy-mj.me/network/what-is-uri
https://www.inflearn.com/course/http-웹-네트워크