2.1 URI (Uniform Resource Identifier)
: 소스를 식별하는 통합된 방법
URI? URL? URN? 의 차이는 무엇일까?
URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다.
1) URI : 리소스를 식별하는 가장 큰 개념이다.
2) URL : 리소스의 위치를 알려준다.
3) URN : 리소스의 이름
우리가 흔히 웹 브라우저에서 사용하는 주소는 URL이다.
이때 URN은 리소스의 이름을 부여하는 것이다
URI (Uniform Resource Identifier) 단어 뜻
- Uniform: 리소스 식별하는 통일된 방식
- Resource: 자원, URI로 식별할 수 있는 모든 것 (제한이 없음)
- Identifier: 다른 항목과 구분하는데 필요한 정보 (ex. 사람을 식별할 때는 주민번호)
URL(Uniform Resource Locator), URN(Uniform Resource Name) 뜻
- URL - Locator: 리소스가 있는 위치를 지정
- URN - Name: 리소스에 이름을 부여
- 위치는 변할 수 있지만, 이름은 변하지 않는다.
- URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음
URL 분석
1) 전체 문법
- 프로토콜(https)
- 호스트명(www.google.com)
- 포트 번호(443)
- 패스(/search)
- 쿼리 파라미터(q=hello&hl=ko)
2) URL 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 포트를 주로 사용 (포트는 생략 가능)
- https는 http에 강력한 보안 추가 (HTTP Secure)
2) URL userinfo
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
- URL에 사용자정보를 포함해서 인증
- 거의 사용하지 않음
3) URL host
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
- 호스트명
- 도메인명 또는 IP 주소를 직접 사용가능
4) URL port
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
- 포트(PORT)
- 접속 포트
- 일반적으로 생략 (생략시 http는 80, https는 443)
5) URL path
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
- 리소스 경로(path)로 계층적 구조
예) /items/iphone12
6) URL query
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
- key=value 형태
- ?로 시작, &로 추가 가능
ex) ?keyA=valueA&keyB=valueB
- query parameter, query string 등으로 불림
(웹서버에 제공하는 파라미터, 문자 형태로 넘어감)
7) URL fragment
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://docs.spring.io/spring-boot/docs/current/reference/html/gettingstarted.html#getting-started-introducing-spring-boot
- fragment
- html 내부 북마크 등에 사용
- 서버에 전송하는 정보 아님
- 주로 사용하지 않음
2.2 웹 브라우저 요청 흐름
앞선 url를 웹 브라우저에서 구글 서버로 보낸다고 가정해보자.
1) 먼저 웹 브라우저가 DNS 서버를 조회한다. (IP : 200.200.200.2, Port : 443)
2) 웹 브라우저는 HTTP 요청 메시지를 생성한다.
HTTP 요청 메시지
HTTP 메시지 전송
1) 웹 브라우저가 HTTP 메시지를 생성한다.
2) 소켓 라이브러리를 통해서 OS에 TCP/IP를 전달한다.
이때, IP 와 PORT 정보로 구글 서버와 연결한다. (SYN, ACK)
3) TCP/IP 에서 패킷을 씌운다. (IP, PORT 정보가 들어 있음)
4) 패킷이 인터넷으로 흘러들어가 서버에 도착하게 된다.
패킷 생성
패킷은 출발지와 목적지의 IP와 PORT 주소를 담고 있으며,
전송데이터는 웹 브라우저가 만든 HTTP 메시지가 된다.
앞서 만들어진 패킷은 수많은 인터넷 노드를 통해서 IP : 200.200.200.2 로 전달된다.
구글 서버에 요청 패킷이 도착하면,
TCP IP 패킷은 까서 버린 후 HTTP 메시지 해석하게 된다.
이후 서버는 HTTP 응답 메시지를 만든다.
HTTP 응답 메시지는 다음과 같은 정보를 포함한다.
1) HTTP 버전, 200 OK
2) CONTENT-TYPE 이 HTML 형식이라는 것
3) 실제 HTML 데이터의 길이를 설정해서 보내줌
구글서버는 동일하게 응답 패킷을 만들고 웹 브라우저에 전달한다.
웹 브라우저는 HTTP 메시지를 열고,
HTML 데이터를 렌더링해서 결과물을 볼 수 있게 된다.
'HTTP 웹 기본 지식' 카테고리의 다른 글
[HTTP 웹 기본 지식] 섹션 5. HTTP 메서드 활용 (0) | 2023.07.08 |
---|---|
[HTTP 웹 기본 지식] 섹션 4. HTTP 메서드 (0) | 2023.07.01 |
[HTTP 웹 기본 지식] 섹션 3. HTTP 기본 (0) | 2023.07.01 |
[HTTP 웹 기본 지식] 섹션 1. 인터넷 네트워크 (0) | 2023.07.01 |
[HTTP 웹 기본 지식] 섹션 0. HTTP를 공부하게 된 이유 / 강의 소개 (0) | 2023.07.01 |