본 자료는 김영한님의 강의 모든 개발자를 위한 HTTP에서 내용을 정리한것입니다.
https://www.ietf.org/rfc/rfc3986.txt - URI에 대한 표준 규약을 정의한 문서
URI는 URL과 URN을 포함하는 개념.
URL -> Locator: 리소스가 있는 위치를 지정
URN -> Name: 리소스에 이름을 부여
위치는 변할 수 있지만, 이름은 변하지 않는다. (URN은 거의 사용 되지 않음.)
Scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
프로토콜(https)
호스트명(www.google.com)
포트 번호(443)
패스(/search)
쿼리 파라미터(q=hello&hl=ko)
실제 웹 브라우저에서 구글 접속요청이 들어왔다면?
브라우저는 구글의 실제 주소(IP)를 DNS 서버로부터 요청.
[클라이언트의 컴퓨터에서 일어나는 일]
1.웹 브라우저가 HTTP 메시지 생성
2.Socket 라이브러리를 통해 Application단에서 TCP/IP단으로 전달..
3.Http 메시지 포함하여 TCP/IP 패킷 생성 - IP와 포트 정보 그리고 전송 데이터가 들어있다.
조금 새부적으로 살펴 보겠다.
=========================================================
클라이언트 컴퓨터에서 일어나는 일
HTPP 요청 메시지
** URL을 통하여 웹 브라우저가 Http 요청 메시지를 생성한다
패킷 생성
** 요청 메시지가 생성되면, Socket 라이브러리를 통해 메시지를 전달하여 Http 메시지를 포함한 TCP/IP 패킷을 생성한다.
==========================================================
여기 서는 구글 서버가 응답 메시지 바디에 반환한 HTML 코드 해석을 시작하고 메모리에 해당 페이지의 내부 표현인 문서 객체 모델 DOM을 구축한다. 이 처리 과정도중에 브라우저는 페이지를 적절히 표시하는 데 필요한 다른 리소스를 볼 것이다.
얼핏 보기에도 웹 브라우저의 흐름 요청은 복잡하고 요청마다 계속 반복되는 작업은 웹 탐색을 느리게 만드는 주요 문제 중 하나이다. 이런 추가적인 리소스 요청을 더 효율적으로 만드는 방법을 연구하면서 개선된 것이 HTTP/2 와 HTTP/3이다.