이 포스팅은 인프런 김영한 강사님의 <모든 개발자를 위한 HTTP 웹 기본 지식>을 수강하고, 공부하여 글로 정리한 것입니다. 그대로 갖다 붙여넣는 내용이 아니라 기억나는대로 작성한 후 다시 추가적으로 정리하는 방식을 취하고 있기 때문에 틀린 부분이 있을 수 있습니다. 잘못된 점은 짚어주시면 감사하겠습니다.
1. URI
- Uniform : 리소스를 식별하는 특별한 방식
- Resource : 자원, URI로 식별할 수 있는 모든 것(제한 없음)
- Identifier : 다른 항목과 구분하는데 필요한 정보
URI = URL(Locator) + URN(Name)
URL : 리소스 위치 지정(주소) / URN : 리소스 이름 부여
※ 이후 URI와 URL을 같은 의미로 이야기하겠음.
URL 전체 문법
scheme://[userinfo@][host] [:port][/path] [?query][#fragment]
ex) https://www.google.com:443/search?q=hello&hl=ko
scheme
-
주로 프로토콜을 사용함(http, https, ftp 등..)
-
프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙
userinfo
- URL에 사용자 정보를 포함하여 인증할 때 사용(거의 사용되지 않음)
host
port
- 포트 번호. http는 80, https는 443을 주로 사용함.
path
- 리소스 경로. 계층적 구조.
- ex) "/home/file.jpg", "/members", "/members/100"
query
fragment
- html 내부 북마크에 사용됨.
- 서버로 전송되는 정보는 아님.
2. 웹 브라우저 요청 흐름

- DNS 조회하여 IP 찾아냄
- HTTPS(혹은 HTTP) 포트 생략
- 웹 브라우저에서 HTTP 요청 메시지 생성
- socket 라이브러리 통해 데이터 전달
1) TCP/IP 연결(IP, PORT) - 이 과정에서 3 way handshake를 통해 서버와의 연결 확인
2) 데이터 전송
- TCP/IP 패킷 생성하여 HTTP 메시지를 감쌈.
- 이 패킷 정보가 인터넷으로 흘러가 서버로 전달됨.

- 서버에서 응답 메시지를 클라이언트로 전달.
Content-Type : 응답하는 데이터가 어떤 형식이고, 무엇으로 인코딩되어 있는지에 대한 내용.
- 클라이언트는 응답 메시지를 받아 웹 브라우저에서 HTML을 렌더링하여 화면에 보여줌.