👩💻 URI와 웹 브라우저 요청 흐름
📌 URI
✏️URI란 무엇인가
: URI(Uniform Resource Identifier
- Uniform: 리소스 식별하는 통일 된 방식
- Resource: 자원, URI로 식별할 수 있는 모든 것
- : URI로 식별할 수 있는 모든 것을 자원(리소스)라고 한다.
- Identifier: 다른 항목과 구분하는데 필요한 정보
URI = Resource Identifier = 리소스를 식별한다 (사람의 주민번호처럼 식별한다, 자원 자체를 식별하는)
URL = Resource Locator = 리소스 로케이터 (리소스의 위치, 리소스가 이 위치에 있어요라는 뜻)
URN = Resource Name = 리소스의 이름 (URN은 리소스 그 자체이다.)
✏️URL과 URN의 뜻
:단어 뜻
- URL - Locator : 리소스가 있는 위치
- URN - Name: 리소스에 이름을 부여
- 위치는 변할 수 있지만, 이름은 변하지 않는다
- 앞으로 URI를 URL과 같은 의미로 이야기함
✏️URL의 전체 문법
- scheme에는 보통 프로토콜의 정보가 들어간다.
- 프로토콜은 어떤 방식으로 접근할 것인가에 대한 서버와 클라이언트간의 약속과 규칙이라고 할 수 있다.(http, https, ftp)
- http는 보통 80포트, https는 443 포트를 주로 사용하며, 포트는 생략 가능하다.
- userinfo@
- URL에 사용자정보를 포함해서 인증
- 거의 사용 안함
- host
- 호스트명이라고 함. 도메인명 또는 IP 주소를 직접 사용가능하다.
- PORT
- 포트(PORT). 접속포트 라고 함.
- path
- 리스소 경로(path), 계층적 구조
- 예)
- /home/file1.jpg
- /members
- /members/100, /items/ipthon12
- query
- key = value 형태
- ?로 시작, &로 추가 가능 ?keyA=valueA&keyB=valueB
- query parameter, query stirng 등으로 불림, 웹서버에 제공하는 파라미터. 문자 형태(String)로 넘어감
- fragment
- html 내부 북마크 등에 사용
- 서버로 전송되는 내용은 아님
📌 웹 브라우저 요청 흐름
✏️ 웹 브라우저 요청 흐름
- 구글서버를 찾기 위해 DNS(도네임)을 조회한다
- 포트 정보를 찾아낸다(https는 보통 43이고 http는 80이다.)
- HTTP 요청 메세지를 생성한다.
"여기서 HTTP 요청 메세지는 어떻게 구성되어있을까?"
"HTTP 메세지 전송"
: 웹 브라우저가 먼저 HTTP 메세지를 생성하고, SOCKET 라이브러리를 통해 전달하여 SYN, SYN+ACK, ACK 하여 서버와 연결하고 데이터를 전달한다. TCP/IP에서 한번 패킷을 씌우고 거기에는 IP PORT 정보가 들어있게 된다. 이 패킷정보는 인터넷으로 흘러가게 된다.
: HTTP 메세지라고 하는 전송 데이터를 TCP/IP 패킷에 포함시켜 인터넷망으로 던진다.
: 요청 패킷을 200.200.200.2번으로 전달하면 구글 서버 요청 패킷은 TCP/IP 패킷을 까서 다 버린 뒤 HTTP 메세지를 꺼내서 해석한다.
(ex) "query가 hello고 search로 왔으니 뭔가 검색한다는 뜻이겠구나. q가 hello고 hl이 한글이네. 그럼 검색엔진을 통해서 hello와 관련된 결과를 한국어로 내보내면 되겠구나"
: HTTP 메세지를 꺼내서 해석을 마친 구글 서버에서, 이 웹서버에서 HTTP 응답 메세지를 만들어 낸다.
구글 서버도 웹 브라우저와 똑같이 응답 HTTP를 TCP/IP 패킷으로 씌워 웹 브라우저에 보낸다. (위의 html 메세지를 보낸다.)
: 응답 패킷을 까서 웹 브라우저가 html 렌더링을 쫙 하고, 우리는 그 html 렌더링 된 화면을 보게 되는 것 이다.
'CS > HTTP' 카테고리의 다른 글
[HTTP] 모든 개발자를 위한 HTTP 웹 기본 지식 - 6 (0) | 2024.01.03 |
---|---|
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 5 (0) | 2024.01.03 |
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 4 (0) | 2023.12.28 |
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 3 (0) | 2023.12.26 |
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 1 (0) | 2023.11.27 |