혼자 정리
[HTTP기본지식] URI와 웹 브라우저 요청 흐름 본문
강의를 듣고 혼자 메모한 내용입니다.
URI(Uniform Resource Identifier)
URI, URL, URN의 차이?
"A URI can be further classified as a locator, a name, or both."(https://www.ietf.org/rfc/rfc3986.txt)
즉, URI 안에 URL(Locator)과 URN(Name)이 담겨 있음.
- Uniform : 리소스 식별하는 통일된 방식
- Resource: URI로 식별할 수 있는 모든 자원
- Identifier: 다른 항목과 구분할 때 필요한 정보
URL - 리소스가 있는 위치를 지정
URN - 리소스에 이름을 부여
URN 이름만 가지고 실제 리소스 찾는 방법이 보편화되지 않아서 잘 안 쓰임
URI와 URL을 같은 의미로 많이 사용
URL 전체 문법
- scheme://[userinfo@]host[:port][/path][?query][#fragment]
- https://www.google.com:443/search?q=hello@hl=ko
- scheme
- 주로 프로토콜 사용.
- 프로토콜 : 어떤 방법으로 자원에 접근할지 약속한 규칙
- userinfo@
- 사용자 정보 포함. 잘 사용하지는 않음
- :port
- 일반적으로 생략
- http - 80 / https - 443
- /path
- 리소스 경로, 계층적 구조
- ?query
- key=value 형태
- ?로 시작. &로 추가 가능
- 쿼리 파라미터, 쿼리 스트링(문자열로 인식되므로) 등으로 부름.
- #fragment
- html 내부 북마크 등에 사용
- 서버에 전송하는 정보는 아님
웹 브라우저 요청 흐름
- URL에서
- DNS에 조회에서 IP 얻어옴. 포트 정보는 URL에 있음
- HTTP 요청 메시지 생성 : ex)
GET /search?q=hello&hl=ko HTTP/1.1 Host: www.google.com
- HTTP 메시지 전송
- 웹 브라우저가 HTTP 메시지 생성
- 소켓 라이브러리 통해 전달
a. 데이터 전달 이전에 TCP/IP 연결을 먼저 진행(SYN, ACK같은 거)
b. 그리고 데이터 전달 - TCP/IP 패킷 생성, HTTP 메시지 포함
- 서버에서 받은 패킷 분석해서 적절한 응답