(인프런) 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 공부하고 리뷰한 글입니다.
1. URI
1. URI? URL? URN?
1) URI(Unifrom Resource Identifier)
URI = URL + URN
Unifrom : 리소스 식별하는 통일된 방식
Resouce : 자원 = URI로 식별할 수 있는 모든 것(제한X)
Identifier : 다른 항목과 구분하는데 필요한 정보
2) URL(Unifrom Resource Locater), URN(Uniform Resource Name)
Locater : 리소스가 있는 위치를 지정
Name : 리소스에 이름을 부여
위치는 변할 수 있지만 이름은 변하지 않는다.
URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지 않음
우리는 URI, URL 정도만 알면 된다. 앞으로 URI를 URL과 같은 의미로 생각하고 이해하면 된다.
2. URL
1) URL 분석
https://www.google.com/search?q=hello&hl=ko
2) URL - 전체 문법
scheme://[userinfo@]host[:port][/path][?query][#fragment]
- scheme: 프토토콜
- host : 호스트 명
- port: 포트번호
- path: 경로
- query: 쿼리 파라미터
3) URL - scheme
주로 프로토콜 사용
- 프로토콜: 어떤 방식으로 자원에 접근할 것인가에 관한 클라이언트 서버간 약속 규칙
- e.g. http, https, ftp 등
- http: 80 포트, https: 443 포트 주로 사용(생략O)
- https는 http에 보안을 추가한 것으로 요즘 대부분의 웹사이트는 https로 동작
4) URL - userinfo
URL에 사용자 정보를 포함해서 인증(거의 사용X)
5) URL - host
호스트명
- 도메인명/IP 주소 직접 사용O
6) URL - PORT
접속 포트
- 일반적으로 생략(생략시 http: 80, https:443)
7) URL - path
리소스 경로
- 계층적 구조
- /home/file1.jpg
- /members
- /members/100
8) URL - query
쿼리 파라미터, 쿼리 스트링
- 웹 서버에 제공하는 파라미터, 문자 형태
- key-value 형태
- ?로 시작, &로 추가 (? keyA=valueA&keyB=valueB)
9) URL - fragment
- html 내부 북마크 등에 사용
- 서버에 전송하는 정보X
2. 웹 브라우저 요청 흐름
1. 웹 브라우저에 URL 입력
2. IP, PORT 정보로 HTTP 요청 메시지 생성
IP는 DNS를 조회해서 얻고, PORT는 생략되어있으면 프로토콜(https)을 보고 유추
<HTTP 요청 메시지>
http 메서드/path, query string/HTTP 버전/호스트(도메인명)
3. HTTP 메시지 전송
SOCKET 라이브러리를 통해
1) 헤더 부분에 IP, PORT 정보를 넣어 3way-handshake로 웹브라우저(클라이언트)와 웹서버(서버)를 연결한다.
2) 연결이되면 HTTP 메시지를 TCP/IP 계층에 전달한다.
4. 패킷 생성
헤더 부분에 출발지 IP, PORT, 목적지 IP, PORT 정보등을 담고 데이터 부분에 HTTP 메시지를 담아 TCP/IP 패킷을 생성한다.
5. 요청 패킷 전달
TCP/IP 패킷이 웹 브라우저(클라이언트)에서 수많은 중간 노드를 거쳐 웹 서버(서버)에 패킷을 전달한다.
6. 서버에 요청 패킷 도착
7. 서버에서 HTTP 응답 메시지 생성
웹 서버(서버)에 도착한 패킷의 헤더 부분은 버리고 HTPP 메시지(데이터 부분)을 서버가 해석하여 HTTP 응답 메시지를 만든다.
<HTTP 응답 메시지>
8. 서버에서 응답 패킷 전달
헤더 부분에 출발지 IP, PORT, 목적지, IP, PORT 정보 등을 담고 데이터 부분에 HTTP 응답 메시지를 담아 만든 응답 패킷을 웹 브라우저(클라이언트)에 전달한다.
9. 웹 브라우저에 응답 패킷 도착
10. 웹 브라우저 HTML 렌더링
웹 브라우저(클라이언트)가 웹 서버로부터 받은 응답 패킷에서 헤더 부분을 버리고 HTTP 응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다.
<웹 브라우저 요청 흐름 정리>
웹 브라우저 = 클라이언트, 웹 서버 = 서버
1) 웹 브라우저에 입력된 URL로 부터 IP, PORT 정보를 얻고 웹 브라우저가 HTTP 요청 메시지를 생성한다.
2) 애플리케이션 계층의 소켓 라이브러리를 통해 IP, PORT 정보를 헤더 부분에 담아 연결을 위한 패킷을 만들고 3-way-handshake 로 웹 서버와 연결한다.
3) 소켓 라이브러리를 통해 HTTP 메시지를 TCP/IP 계층으로 전달한다.
4) 헤더 부분(출발지 IP, PORT, 목적지 IP, PORT 등)과 데이터 부분(HTTP 요청 메시지)을 합쳐 TCP/IP 패킷을 생성한다.
5) 웹 브라우저에서 인터넷망(수많은 노드들)을 거쳐 웹 서버로 패킷을 전달한다.
6) 웹 서버는 도착한 패킷의 헤더 부분은 버리고 데이터 부분(HTTP 요청 메시지)를 해석하여 HTTP 응답 메시지를 만든다.
7) 헤더 부분(출발지 IP, PORT, 목적지 IP, PORT 등)과 데이터 부분(HTTP 응답 메시지)을 합쳐 TCP/IP 응답 패킷을 생성한다.
8) 웹 서버에서 인터넷망(수많은 노드들)을 거쳐 웹 브라우저로 응답 패킷을 전달한다.
9) 웹 브라우저는 도착한 응답 패킷의 헤더 부분은 버리고 HTTP 응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다.
[참고] https://www.inflearn.com/questions/150522
[참고] https://www.inflearn.com/questions/109468
[참고] https://www.inflearn.com/questions/208566
2-1. URI 질문 정리
Q. 호스트 명과 도메인 명은 같은 것인가?
A. 호스트 이름은 도메인 이름의 한 가지 특수한 유형으로 도메인 이름 중에서 IP 주소를 설정할 수 있는 이름을 말한다.
호스트의 기준은 IP 주소이고 호스트 이름은 호스트에 부여된 이름이다. 즉 IP 주소를 갖고 있는 어떤 것에 이름을 부여한 것이다.
[출처] https://www.inflearn.com/questions/154682
2-2. 웹 브라우저 요청 흐름 질문 정리
Q. DNS 는 3way-handshake가 발생하지 않는가?
A. DNS는 UDP를 이용하므로 3way-handshake가 발생하지 않는다.
[출처] https://www.inflearn.com/questions/433893
'Spring > 모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - Stateful, Stateless (2) | 2022.05.27 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - 모든 것이 HTTP, 클라이언트 서버 구조 (0) | 2022.05.26 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - PORT, DNS (0) | 2022.05.26 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - TCP,UDP (2) | 2022.05.26 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, IP(인터넷 프로토콜) (0) | 2022.05.25 |