일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Custom Hook
- JavaScript
- useEffect
- Microtask Queue
- 타입 단언
- task queue
- useLayoutEffect
- 명시적 타입 변환
- docker
- react
- Sparkplug
- TypeScript
- 프로세스
- prettier
- 암묵적 타입 변환
- Event Loop
- Dockerfile
- Headless 컴포넌트
- Compound Component
- 주니어개발자
- useMemo
- AJIT
- 좋은 PR
- useCallback
- CS
- Render Queue
- type assertion
- linux 배포판
- prettier-plugin-tailwindcss
- React.memo
- Today
- Total
구리
[네트워크] HTTP에 대해 (2) - URI, 웹 브라우저 요청 흐름 본문
HTTP에 대해 공부하며 정리한 글입니다.
1. URL
이름이 비슷하며 헷갈릴 수 있는 URI, URL, URN에 대해 알아봅니다.
URI, URL, URN이란?
- URI(Identifier) - 자원을 식별 (서울 사는 김철수)
- URL(Locator) - 리소스의 위치를 지정 (서울)
- URN(Name) - 리소스 이름을 부여 (김철수)
자원의 위치는 변할 수 있지만 이름은 변하지 않으며 URN 이름만으로는 실제 리소스를 찾을 수 있는 방법이 보편적이지 않습니다.
Q) 그런데 주소창에는 URL만 검색해도 원하는 자원을 얻을 수 있습니다. 위의 개념대로라면 주소창에는 URL + URN을 같이 입력해야 하지 않을까요? 만약 URL에 여러 자원이 존재한다면 서버는 정확히 어떤 자원을 원하는지 어떻게 알 수 있을까요?
URL은 자원의 위치를 나타내는 주소입니다. 예를 들어, "https://www.example.com/images/picture.jpg"라는 URL은 이미지 파일인 "picture.jpg"가 "https://www.example.com/images/"라는 위치에 있는 것을 나타냅니다. URL은 특정 자원의 위치를 지정하는 역할을 합니다.
하지만 검색 엔진은 URL만으로도 자원을 검색할 수 있습니다. 이는 검색 엔진이 URL을 통해 웹 페이지를 크롤링하고 색인화하기 때문입니다. 검색 엔진은 URL의 경로, 쿼리 매개변수 등을 분석하여 해당 자원을 식별하고 색인에 포함시킵니다.
물론, URL만으로는 특정 자원을 완전히 고유하게 식별할 수 없을 수도 있습니다. 예를 들어, 같은 URL에 여러 자원이 존재할 수도 있습니다. 이럴 경우에는 URN을 추가하여 정확한 자원을 식별할 수 있습니다. URN은 자원의 고유한 이름을 나타내며, URL과는 달리 자원의 위치와는 관련이 없습니다.
따라서, 정확한 자원을 얻기 위해서는 검색창에 URL과 URN을 함께 입력하는 것이 유용할 수 있습니다. 그러나 보편적으로는 검색 엔진이 URL만으로도 많은 자원을 검색할 수 있으므로, 대부분의 경우 URL만으로도 원하는 자원을 찾을 수 있습니다.
URI (Uniform Resource Identifier)
URI는 URL과 URN을 포함하는 개념으로 리소스를 식별하기 위해 존재합니다.
- Uinform - 리소스를 식별하는 통일된 방식
- Resource - 자원을 의미하며 URI로 식별할 수 있는 모든 것
- Identifier - 다른 항목과 구분하는데 필요한 정보
URL 구조
scheme://[userinfo@]host[:port][/path][?query][#fragment]
// 예시
https://www.google.com:443/search?q=hello&hl=ko
- scheme (https)
- 주로 프로포콜 정보를 사용합니다.
- userinfo
- URL에 사용자 정보를 포함해서 인증하는 역할로 거의 사용하지 않습니다.
- host (www.google.com)
- 호스트명으로 보통 도메인명 또는 IP 주소를 직접 사용합니다.
- 참고로 호스트명은 도메인명의 한가지 유형으로 도메인명중 IP 주소를 설정할 수 있는 이름이 호스트명입니다.
- port (443)
- 접속 포트 번호를 의미하며 일반적으로 포트 번호는 생략할 수 있습니다.
- 생략시 http는 80, https는 443입니다.
- path (search)
- 리소스 경로를 의미하며 일반적으로 계층적 구조로 URL path를 설계합니다.
- query (q=hello&hl=ko)
- 웹서버에 제공하는 파라미터입니다.
- key=value 형태로, 쿼리는 ?로 시작하며 쿼리 스트링, 쿼리 파라미터라고도 부릅니다.
- fragment
- html 내부 북마크 등에 사용되며 서버에 전송하는 정보는 아닙니다.
- 페이지의 특정 요소를 지시하는 역할로 해당 url 페이지에서 해시태그로 지시한 id 요소를 스크롤 이동 없이 확인할 수 있습니다.
- 보통 여러 컨텐츠가 나열된 페이지의 특정 위치 정보를 사용자에게 함께 전달할 때 사용됩니다.
2. 웹 브라우저 요청 흐름
URL에 주소를 입력하고 이동시 다음과 같은 과정이 진행됩니다.
- DNS를 통해서 IP를 획득하고, PORT 생략시 scheme을 통해 PORT를 찾아냅니다. (참고로 DNS와 통신하는 과정에서는 UDP를 사용하며 3 way handshake가 일어나지 않습니다.)
- 웹 브라우저는 HTTP 요청 메세지를 생성합니다.
- SOCKET 라이브러리를 통해 전송 계층으로 전달합니다. (SOCKET은 응용 계층과 전송 계층 사이의 연결고리 (소프트웨어 인터페이스) 역할을 합니다.)
- OS에서는 3 way handshake를 통해 서버와 클라이언트 간의 연결을 확인한 후 HTTP 메세지를 포함하는 TCP/IP 패킷을 생성합니다.
- 그리고 네트워크 인터페이스로 패킷을 전달 후 해당 인터넷 망을 통해 서버로 패킷을 전송합니다.
'네트워크' 카테고리의 다른 글
[네트워크] CORS (0) | 2023.06.21 |
---|---|
[네트워크] HTTP 헤더 - 캐시와 조건부 요청 (1) | 2023.06.18 |
[네트워크] HTTP에 대해 (4) - HTTP 쿠키, 세션 (0) | 2023.06.13 |
[네트워크] HTTP에 대해 (3) - HTTP 기본 (0) | 2023.06.10 |
[네트워크] HTTP에 대해 (1) - IP, TCP/UDP, PORT, DNS (0) | 2023.06.08 |