후라이
[URI & 웹 브라우저 요청 흐름] 본문
1. URI(Uniform Resource Identifier)
1.1) URI? URL? URN?
URI와 URL의 개념을 헷갈릴 수 있어 이 개념을 먼저 잡고 가자.
"URI는 로케이더(Locator), 이름(Name) 또는 둘 다 추가로 분류될 수 있다."
쉽게 말해, URI가 가장 큰 개념 이다. 이 URI는 결국엔 주민번호로 사람을 식별하듯이 소스를 식별한다.
- URL(Resource Locator) : 차은우가 어디있다.
- URN(Resource Name) : 차은우다.
이런 식으로 이해하면 편하겠다!
하지만 알아야할 것은, 위치는 변할 수 있지만, 이름은 변하지 않는다.
그리고 URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지도 않았다.
1.2) URL(=URI)
그럼 이제 그냥 URI와 URL을 같은 의미로 이야기하겠다.
전체 문법이 아래와 같다.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
그리고 아래는 위 문법을 따른 실제 URL 주소이다.
https://www.google.com:443/search?q=hello&hl=ko
<문법 설명>
- https는 알다시피 프로토콜이다. (프로토콜 : 어떤 방식으로 자원에 접근할 것인가의 "규칙") ex) http, https, ftp 등
- 위 예시 주소에는 생략되어 있지만, [userinfo@]가 있다.
이는 URL에 사용자 정보를 포함해서 인증하는 것으로 거의 사용하지 않는다. - www.gmail.com은 은 호스트명이다.
도메인 명 또는 IP 주소를 직접 사용할 수 있다. - 443은 포트번호이다. 포트번호에 대해서는 이전 게시글에서 설명했다.
주로, http는 80 포트, https는 443 포트를 사용하며, 포트는 생략 가능하다. - /search는 패스 (path) 이다. 이 리소스 경로는 계층적 구조로 우리가 디렉토리를 타고 파일 경로를 위치하듯이 표현한다.
ex) /home/file1.jpg - q=hello&hl=ko는 query이다.
key=value 형태이며, ?로 시작한다. 그리고 &으로 쿼리를 추가할 수 있다.
queery parameter, query string 등으로 불리며, 웹 서버에 제공하는 파라미터이다. - 위 예시에는 나오지 않지만 [#fragment] 도 있다.
잘 사용하진 않지만, html 내부에서 이동할 때 주로 사용한다.
>> html 내부 북마크 등에 사용되며 서버에 전송하는 정보는 아니다.
2. 웹 브라우저 요청 흐름
웹 브라우저인 클라이언트가 위와 같은 URL을 요청한다고 하자.
그럼, 클라이언트 단에서는 서버에 보낼 HTTP 요청 메시지를 생성해서 보낸다.
해당 메시지는
GET /search?q=hello&hl=ko HTTP/1.1
Host: http://www.google.com
이렇게 생겼다. (HTTP 메시지는 이 다음 글에서 설명)
- HTTP 메시지 생성 (Application 계층)
웹 브라우저는 사용자가 입력한 URL이나 웹 페이지 요청에 따라 HTTP 요청 메시지를 생성한다.- 요청 메시지는 아래와 같다. (이 다음 글에 메시지 형식 자세히 설명)
GET /search?q=hello&hl=ko HTTP/1.1
Host: http://www.google.com
- 요청 메시지는 아래와 같다. (이 다음 글에 메시지 형식 자세히 설명)
- SOCKET 인터페이스를 통해 데이터 전달 (Transport 계층)
- HTTP 메시지는 소켓 라이브러리를 통해 전달된다.
- 여기서 TCP 프로토콜이 사용됩니다. TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 HTTP 메시지를 세그먼트(segment)로 분할하고, 각 세그먼트를 재조립할 수 있는 메커니즘(예: 순서 번호)을 추가한다.
- 브라우저는 서버의 IP 주소와 포트 번호를 사용해 TCP 연결을 설정한다.(일반적으로 포트 80은 HTTP, 포트 443은 HTTPS에 사용).
- TCP/IP 패킷 구성 (Internet 계층)
- TCP 세그먼트는 IP 패킷으로 감싸진다.
- IP 계층에서는 목적지 서버의 IP 주소를 포함한 라우팅 정보를 추가한다.
- 데이터 전송 (Network Interface 계층)
- IP 패킷은 물리적 네트워크(예: 이더넷, Wi-Fi)를 통해 서버로 전송된다.
- 이 과정에서 IP 패킷은 프레임(frame)으로 감싸져 실제 전송 매체로 전달된다.
- 서버 측의 처리
- 서버는 수신된 프레임을 IP 패킷으로 복원하고, TCP 계층에서 메시지의 순서를 확인한 뒤 이를 애플리케이션 계층(HTTP 서버)으로 전달한다.
- HTTP 서버는 요청 메시지를 처리하고, 응답 메시지를 생성하여 동일한 과정을 역으로 거쳐 클라이언트로 보낸다. HTTP 응답 메시지는 아래와 같다.
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
이렇게 보내진 요청 패킷은 서버단에 보내져 돌아올 때도
똑같은 과정으로 응답 메시지가 만들어진다.
[참고] : 인프런-김영한 <모든 개발자를 위한 HTTP 웹 기본 지식>
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 상태 코드 (2) | 2024.12.15 |
---|---|
[HTTP] HTTP 메서드 활용 | 정적 / 동적 데이터 | HTML Form | HTTP API (1) | 2024.12.15 |
[HTTP] HTTP Method (3) | 2024.12.12 |
[HTTP] 모든 것이 HTTP | HTTP Message (1) | 2024.12.12 |
[인터넷 네트워크] IP | TCP/UDP | PORT | DNS (1) | 2024.12.11 |