BE/HTTP

[HTTP] URI와 웹브라우저 요청 흐름

mandelina 2022. 5. 15. 01:30

 ✔️ URI?  URN + URL

 - URN?  Resource Name  (리소스 이름)

 - URL ?  Resouce Locator (리소스의 위치)

 

 

출처 : 모든 개발자들을 위한 HTTP 웹기초 / 김영한님 자료

 

벤다이어그램으로 표현하면 위의 이미지와 같다.

 

하지만 , URN은 거의 사용하지 않는다!

- 이름만으로 실제 리소스를 찾을수 있는 방법이 보편화 되지않았기 때문

- 대부분 URL 사용

 

 


그러면 본격적으로 URI에 대해 자세히 알아보자.

 

 ✔️ URI?  

Uniform : 리소스를 식별하는 통일된 방식

 

Resource : 자원 , URI로 식별할 수 있는 모든것을 뜻함

EX ) HTML파일뿐만아니라 실시간 교통정보 등 식별할수 있는 모든것.

 

Identifier : 다른 항목과 구분하는데 필요한 정보

 

 ✔️ URI 전체 문법

scheme://[userinfo@]host:[:port][/path][?query][#fragment]

 

[예시]

https://www.google.com/search?q=hello&hl=ko

 

 

1) scheme : 주로 프로토콜 사용

    ex) http (80), https(443) , ftp 

 

2) userinfo : 사용자정보를 포함해서 인증 , 거의 사용하지 않음

 

3) host : 도메인명이나  ip주소를 직접 사용가능

 

4) port : 일반적으로 생략 , 생략시 http는 80 , https는 443

 

5) path : 리소스의 경로 , 계층적구조로 되어있다.

 

6) query : key=value형태로 데이터가 들어간다. ?로 시작, &로 추가가능

    (쿼리파라미터 , 쿼리스트링등으로 불림)

 

7) fragment : html내부 북마크등에 사용, 잘사용하지않음 (서버에 전송되는 정보가 아니다.)

 

 


 ✔️웹브라우저 요청 흐름

 

https://www.google.com/search?q=hello&hl=ko

 

우리가 위의 주소를 딱 누른 순간

 

1) 웹브라우저는 google서버를 찾기 위해 DNS를 조회하고 ip와 port정보를 알아낸다.

 

2) ip와 port정보를 토대로 HTTP 요청메시지를 생성한다.

출처 : 모든 개발자들을 위한 HTTP 웹기초 / 김영한님 자료

 

3) HTTP 메시지를 전송한다.

    1. socket 라이브러리를 통해 TCP/IP 연결 (IP와PORT 정보로)

    2. TCP/IP로 데이터 전달

    3. HTTP메시지를 포함한 TCP/IP 패킷 생성 

    4. LAN드라이버,장비를 통해 인터넷망으로 던져진다.

 

출처 : 모든 개발자들을 위한 HTTP 웹기초 / 김영한님 자료

 

출처 : 모든 개발자들을 위한 HTTP 웹기초 / 김영한님 자료

 

4) 인터넷망으로 던져지면 구글서버로 전달이 되고, 구글서버는 TCP/IP패킷을 다 까서 버리고 HTTP 메시지를 해석한다.

 

5) HTTP 메시지를 통해 데이터를 찾은 후 응답메시지를 만든다. (200 OK)

 

6) (데이터+응답메시지)로 응답 패킷을 만들고 다시 웹브라우저에게 전송한다.

출처 : 모든 개발자들을 위한 HTTP 웹기초 / 김영한님 자료

 

7) 웹브라우저가 응답패킷을 까고 HTML을 렌더링 시킨다.