참고용 - 표준 스펙 규격
1. URI
URI(Uniform Resource Identifier)와 URL, URN
Uniform: 자원을 식별하는 통일된 방식
Resource: 자원, URI로 식별할 수 있는 모든 것 (구분할 수 있는 것들)
Identifier: 식별자, 다른 항목과 구분하는데 필요한 정보
a. URL(Uniform Resource Locator)
자원이 있는 위치를 지정해 나타낸다. ex. http://www.example.com:8042/over/there
위치는 변할 수 있다.
b. URN(Uniform Resource Name)
자원에 이름을 부여해 나타낸다. ex. urn:example:latitude:4921
이름은 변할 수 없다.
URN 이름만으로 실제 자원을 찾을 수 있는 방법이 보편화되어 있지 않기 때문에 대부분은 URL만 사용한다. (URI == URL)
URL 분석 - 예시
https://www.google.com/search?q=hello&hl=ko
여기서 q는 query를 의미하고, hl은 language를 의미한다.
전체 문법을 살펴보면 다음과 같다.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
a. scheme(https)
주로 프로토콜이 사용된다.
프로토콜은 어떤 방식으로 자원에 접근할 것인지에 대한 클라이언트와 서버 간의 약속 규칙으로, http, https(http에 secure 추가), ftp 등이 있다.
b. userinfo(생략)
URL에 사용자 정보를 포함해서 인증하는 것으로, 거의 사용하지 않는다.
c. host(www.google.com)
호스트명으로 hostname 또는 IP 주소를 직접 사용 가능하다.
d. port(:443)
전 편에 설명했던 port로, 접속 포트이며 일반적으로는 생략한다. ex. http(80), https(443)
e. path(search)
자원의 경로로 계층 구조를 가진다. ex. /home/file1.jpg, /members, /members/100, items/iphone12
f. query(q=hello&hl=ko)
key=value의 형태이며, '?'로 시작한다. &로 추가 조건을 붙일 수 있다. ex. keyA=valueA&keyB=valueB
query parameter(string)으로 불리며, 웹 서버에 제공하는 파라미터이고, 문자 형태로 전송되는 파라미터이다.
g. fragment
html 내부 북마크 등에 사용되며, 서버에 전송되는 정보가 아니다.
2. 웹 브라우저 요청 흐름
웹 브라우저에서 클라이언트가 요청한 URL 주소를 파싱해 IP 주소와 port 번호를 알아낸 뒤, HTTP 요청 메시지를 생성한다.
이후 TCP/IP 패킷에 HTTP 요청 메시지를 담아 목표 서버에 전달한다.
서버에서 패킷을 열어 HTTP 요청 메시지를 분석하고, 요청에 대한 HTTP 응답 메시지를 만들어 전달한다.
이후 응답을 받은 웹 브라우저에서 패킷을 열어 HTTP 응답 메시지를 확인하고, HTML 렌더링을 통해 요청한 화면을 클라이언트에게 보여준다.