모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스
www.inflearn.com
강의를 들으며 생각 정리
URI
URI(Uniform Resource Identifier)는 리소스를 구별하는 방식으로 URL과 URN으로 나뉜다.
URL(Locator)은 리소스가 있는 위치를 지정한다. 흔히 우리가 주소창에 입력하는 내용(https://www.google.com)을 URL이라 한다.
URN(Name)은 리소스에 이름을 부여한다. urn:isbn:12345 (어떤 책의 isbn이 12345) 처럼 리소스에 정해진 이름이다.
위치는 변할 수 있지만, 이름은 변하지 않는다. 그리고 URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지 않았기 때문에 URI를 URL과 같은 의미로 봐도 좋다.
URL 문법
URL은 다음과 같은 문법으로 구성되어 있다.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
- 프로토콜(https)
- 호스트명(www.goggle.com)
- 포트 번호(443)
- 패스(/search)
- 쿼리 파라미터(q=hello&hl=ko)
하나하나 알아보자.
<scheme>
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
스키마에는 주로 프로토콜을 사용한다.
프로토콜은 어떤 방식으로 자원에 접근할 것인가 하는 약속, 규칙이다.
예) http, https, ftp 등
http는 80 포트, https는 443 포트를 주로 사용한다. 포트는 생략 가능하다.
https는 http에 보안을 추가한 것이다. 최근 많이 사용한다.
<userinfo>
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
URL에 사용자정보를 포함해서 인증한다.
거의 사용하지 않는다.
<host>
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
호스트명으로 도메인명 또는 IP 주소를 직접 사용한다.
<port>
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
접속 포트 번호다.
일반적으로 생략 가능하다. 생략시 http는 80, https는 443이다.
<path>
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
리소스의 경로로 계층적 구조를 띈다.
예) /members/100
<query>
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
key=value의 형태다.
?로 시작하고 &으로 추가 가능하다. 예) ?keyA=valueA&keyB=valueB
query parameter, query string으로 불린다. 웹 서버에 제공하는 문자이다.
<fragment>
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시) https://www.google.com:443/search?q=hello&hl=ko
html 내부 북마크 등에 사용한다.
서버에 전송하는 정보는 아니다.
웹 브라우저 요청 흐름
https://www.google.com:443/search?q=hello&hl=ko
이제 위 URL을 통해 브라우저와 서버간에 어떻게 통신을 하는지 알아보자.
https://www.google.com:443/search?q=hello&hl=ko
먼저 호스트 이름을 DNS에 조회해서 서버의 IP 주소를 찾는다. port 번호도 마찬가지로 기억해둔다.
이를 기반으로 HTTP 요청 메시지를 작성한다. 이후에 HTTP에 대해 자세히 배울 것이지만 일단 다음과 같은 메시지가 생성된다고 하자.
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
HTTP 메시지 전송
웹 브라우저 -> 구글 서버
- 웹 브라우저가 HTTP 메시지를 생성한다
- SOCKET 라이브러리를 통해 전달한다 -> TCP/IP 연결(IP,PORT)
- HTTP 메시지를 포함해서 TCP/IP 패킷을 생성한다.
- 패킷을 서버로 전송한다.
구글 서버 -> 웹 브라우저
HTTP 응답 메시지를 생성한다.
<예시>
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
html 메시지를 브라우저->서버의 방식과 동일하게 TCP/IP 패킷으로 감싸 웹 브라우저에 전송한다.
전송 받은 웹 브라우저는 해당 html 파일을 화면에 띄운다.
'http' 카테고리의 다른 글
HTTP 상태코드 (0) | 2021.04.13 |
---|---|
HTTP 메서드 활용 (0) | 2021.04.12 |
HTTP 메서드 (0) | 2021.04.12 |
HTTP 기본 (0) | 2021.04.07 |
인터넷 네트워크 (0) | 2021.04.06 |