IT 지식
[HTTP] URI와 웹 브라우저 요청 흐름
나프초
2024. 3. 31. 08:38
URI (Uniform Resource Identifier)
URI를 직역하면 리소스를 식별하는 통합된 방법이라는 뜻이다.
1. URI와 비슷한 개념
- URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다. (두개를 모두 포함하는 개념)
- URL (Resource Locator) : 리소스의 위치(주소)를 지정
- URN (Resource Name) : 리소스의 이름 그자체 (위치는 변할 수 있지만 이름은 변하지 않는다.)
- 이름을 넣으면 결과가 나오도록 맵핑되어있어야 하는데 어렵다. 사실상 잘 쓰지 않는다.
- URN을 잘 쓰지 않기 때문에 보통 URI라고 해도 URL을 지칭하는 경우가 많다!
2. URI 단어 뜻
- Uniform : 리소스를 식별하는 통일된 방식
- Resource : 자원, URI로 식별할 수 있는 모든 것
(html 파일같은 것만 자원을 뜻하는게 아니라, 우리가 구분할 수 있는 모든 걸 리소스라고 이해하는게 좋다.) - Identifier : 다른 항목과 구분하는데 필요한 정보
3. URI 문법
- 문법 : scheme://[userinfo@]host[:port][/path][?query][#fragment]
- 예시 : https://www.google.com:443/search?q=hello&hl=ko
- scheme
- 주로 프로토콜이 사용된다.
- 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙(http, https, ftp..)
- http --> 80 포트, https --> 443 포트 생략 가능
- 예시의 https 에 해당한다.
- userinfo
- URL에 사용자 정보를 포함해서 인증해야할 때 쓴다.
- 거의 사용하지 않는다.
- host
- 호스트명을 입력하는 부분이다.
- 도메인 명 또는 IP 주소를 직접 사용할 수 있다.
- 예시의 www.google.com 에 해당한다.
- port
- 접속할 포트를 적는다.
- 일반적으로 생략할 때 http는 80, https는 443으로 이해하면 된다.
- 예시의 443 에 해당한다.
- path
- 리소스가 있는 경로를 계층적 구조로 적는다.
- 예시의 search 에 해당한다.
- query
- key=value 형태로 데이터를 넘겨준다.
- ?로 시작하고, 데이터 사이에 &로 추가한다.
- query parameter, query string 등으로 불린다. (숫자를 입력해도 문자로 넘어가기 때문에 string이라고 불린다.)
- 예시의 q=hello&hl=ko 에 해당한다.
- fragment
- html 내부에서 중간으로 바로 이동할 때, 내부 북마크 등에서 사용한다.
- 서버로 전송되는 데이터가 아니다!!
- 예) https://docs.spring.io/spring-boot/~~~~/getting-started.html#getting-started-introducing-spring-boot
웹 브라우저 요청 흐름
우리가 URL 형식으로 웹브라우저에 요청하면 어떻게 될까?
예시 ) https://www.google.com:443/search?q=hello&hl=ko
1. DNS 서버를 조회하여 IP 정보를 알아낸다.
- www.google.com 의 IP가 200.200.200.2 (가상) 라고 알아냈고,
- port가 443으로 명시되어있지만 없었다고 해도 https 를 사용하기 때문에 443포트라고 이해할 수 있다.
2. 웹브라우저가 HTTP 요청 메시지를 생성한다.
GET /search?q=hello&hl=ko HTTP/1.1 Host: www.google.com |
- get방식
- path부터 쿼리 정보
- http 버전 정보
- host 정보
- (생략된 형태)
3. 소켓 라이브러리를 통해 OS의 TCP/IP 계층에 전달한다.
- TCP/IP 연결
- 데이터 전달
4. HTTP 요청 메시지를 포함하여, TCP/IP 패킷을 생성한다.
5. 패킷 정보가 네트워크 인터페이스를 통해 인터넷으로 흘러가게 된다.
6. 수많은 인터넷 노드를 통해 (가상의) 구글 서버로 패킷이 전달된다.
7. 서버는 요청 패킷을 분해하여 읽고, HTTP 응답 메시지를 생성한다.
HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 3423 <html> <body>...</body> </html> |
8. 동일하게 응답 메시지를 TCP/IP패킷으로 싸서 요청한 서버에게 패킷을 전달한다.
9. 요청 웹서버도 응답 패킷을 분해하여 html 메시지를 읽고, html렌더링을 하여 페이지를 보게 된다.
이 포스팅은 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 수강하며 작성되었습니다.
모든 개발자를 위한 HTTP 웹 기본 지식 | 김영한 - 인프런
김영한 | 실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연
www.inflearn.com