- URI
- Uniform: 리소스를 식별하는 통일된 방식
- Resource: 자원, URI로 식별할 수 있는 모든 것
- Identifier: 다른 항목과 구분는데 필요한 정보
- URI(Uniform Resource Identifier)는 자원을 식별하는 가장 큰 개념이며, 아래 두 가지로 분류된다.
- URL(Uniform Resource Locator): 자원의 위치로 식별 (예:
https://example.com/index.html) - URN(Uniform Resource Name): 자원의 이름으로 식별 (예:
urn:isbn:0451450523) - 실제로 URN은 거의 사용되지 않으며, 현실에서 URI는 URL과 거의 동일한 의미로 쓰인다.
- URL은 다음과 같이 구성된다.
| 구성요소 | 예시 | 설명 |
| scheme | https | 프로토콜 (http, https, ftp 등) |
| authority | www.example.com:8080 | 호스트(도메인 또는 IP) + 포트 |
| path | /search/item | 자원의 경로 |
| query | ?sort=asc&page=1 | 서버에 전달하는 추가 파라미터 (key=value 형식) |
| fragment | #section-2 | 문서 내 특정 위치 앵커 (서버에 전송되지 않음) |
URL 각 구성
scheme://[userinfo@]host[:port][/path][?query][#fragment] - Scheme
- 주로 프로토콜을 사용하며, 어떤 방식으로 자원에 접근할지에 대한 약속 (http, https, ftp 등)
- UserInfo
- URL에 사용자 정보를 포함하여 인증하는 요소
- 거의 사용되지 않음
- Host
- 호스트명: 네트워크에서 특정 서버를 식별하는 이름
- 도메인명 또는 IP 주소를 직접 사용 가능
- Port
- 접속 포트 정보
- 일반적으로 생략하며, http는 80, https는 443이 기본값
- Path
- 리소스의 경로, 계층 구조를 가짐 (예:
/home, /home/members)
- Query
key=value 형태로 서버에 추가 파라미터를 전달 ?로 시작하고, &로 여러 쿼리를 연결 가능 (예: ?sort=asc&page=1)
- Fragment
- HTML 내부 북마크 등에 사용되며, 서버로 전송되지 않고 브라우저에서만 처리됨
웹 브라우저 요청 흐름
- 호스트명 + 포트 정보를 가지고 DNS 조회 → IP 주소 획득
- 웹 브라우저가 HTTP 요청 메시지 생성
- 메서드(GET, POST 등), 호스트(HOST), 프로토콜 버전, 경로, 쿼리 등의 정보 포함
- 소켓 라이브러리를 통해 OS 계층으로 메시지 전달
- TCP 3-way handshake로 서버와 연결 수립
- TCP/IP 패킷 생성 (TCP 헤더 + IP 헤더로 메시지를 감싸 캡슐화)
- 네트워크 인터페이스를 통해 인터넷을 거쳐 서버로 전달
- 서버에서 HTTP 응답 메시지 생성 후 TCP/IP 패킷에 담아 클라이언트로 전달
- 브라우저에서 응답 데이터 수신 후 렌더링 처리