본문 바로가기

네트워크/영한님 강의 - HTTP 웹 기본 지식

URI와 웹 브라우저 요청 흐름

현재 포스팅은 영한님의 HTTP 강의를 바탕으로 작성한 포스팅입니다 :)

 

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술

www.inflearn.com

 


URI및 URL 구성 요소

URI(Uniform Resource Identifier)는 인터넷 자원을 나타내는 고유식별자로, URL(Resource Locator: 위치)와 URN(Resource Name : 이름)으로 나뉩니다.

 

URI에서 Uniform은 리소스를 식별하는 통일된 방식, Resource는 URI로 식별할 수 있는 자원(ex: html 파일, 실시간 교통 정보 등 제한이 없음), Identifier는 다른 항목과 구분하는데 필요한 정보를 의미합니다.

 

만약 웹 브라우저에 https://www.google.com/search?q=hello&hl=ko 이러한 url을 치면, 이에 대한 리소스를 내려주게 됩니다.

 

위 그림과 함께 URL의 구성 요소에 대해 차근차근 알아보겠습니다 :)

 

scheme : 프로토콜을 나타냅니다. 여기서 프로토콜이란 어떤 방식으로 자원에 접근할 것인가 하는 약속 및 규칙이라고 이해하시면 좋을 것 같습니다. (ex: http, https, ftp 등등)

 

userInfo : URL에 사용자 정보를 포함해서 인증해야 할때 사용하는 정보로, 거의 사용하지 않습니다.

 

host : 호스트명으로 도메인 명 또는 IP주소를 나타냅니다.(ex:www.gooogle.com)

 

port : 접속 포트 번호를 적게 됩니다. 일반적으로 http는 80, https는 443 포트를 사용합니다.

 

/path : 리소스 경로를 나타내며, 보통 계층적 구조로 구성되어있습니다.(ex: /home/fil1.jpg, /members/100, /items/iphone14 등등)

 

query : key-value 형태의 데이터로 보통 쿼리 파라미터나, 쿼리 스트링 등으로 불립니다.(웹 서버에서 제공하는 파라미터, 문자 형태)

 

fragment : html 내부 북마크 등에 사용하는 정보로 서버에서 사용하지 않는 정보입니다.


웹 브라우저 요청 흐름

 사용자가 웹 브라우저에 URL을 입력하면 웹 브라우저는 해당 URL을 기반으로 HTTP 요청 메세지를 생성합니다. 이 메세지는 요청 헤더, 메서드 타입(GET, POST 등), 경로(IP, PORT) 정보를 포함합니다.

 

 

이후 웹 브라우저는 SOCKET 라이브러리를 사용하여 OS 계층에 데이터 전송 요청을 합니다. 여기서 SOCKET은 응용 프로그램과 TCP/IP 간의 중간 인터페이스 역할을 한다고 이해하시면 됩니다!

 

웹 브라우저는 TCP 3-way-handshake를 통해 서버와의 연결을 확립합니다. 이후 연결이 확립되면 웹 브라우저는 HTTP 요청 메세지를 서버에 전달하게 됩니다. 

 

 

서버 전달 시, HTTP 요청 메세지는 TCP/IP 패킷으로 감싸져서 전송됩니다. 이 패킷에는 출발지와 목적지의 IP,PORT 뿐 아니라 패킷의 순서 등의 정보를 포함합니다.

 

이렇게 생성된 TCP/IP 패킷은 인터넷을 통해 해당 서버의 IP 주소로 전송됩니다.

 

이후 Request는 인터넷에 수많은 노드를 거쳐 구글 서버에 도착을 할것입니다. 이때 구글 서버는 TCP/IP 패킷을 제거하고, HTTP 메세지를 확인합니다. 이때 서버는 파라미터들을 바탕으로 데이터를 찾은뒤 다음과 같은 형식으로,HTTP 응답 메세지를 내려주게 됩니다.

 

이후 구글 서버도 똑같이 응답 메세지에 패킷을 씌운 다음 응답을 내려주게 됩니다!