본문 바로가기
CS

URI와 웹 브라우저 요청 흐름, Stateful

by 김선지 2024. 6. 4.

URI (Uniform Resource Identifier) 리소스 식별자

URI는 리소스 로케이터 - (리소스 위치 URL), 리소스 이름(URN) 또는 둘다 추가로 분류될 수 있다.

URI 안에 URL과 URN이 있다.

https://www.ietf.org/rfc/rfc3986.txt

foo:// 로 시작하는 부분이 URL이고 urn부분이 URN이다. 위 둘을 합친 것이 URI

 

Uniform : 리소스를 식별하는 통일된 방식

 

Resource : 자원으로 URI로 식별할 수 있는 모든 것 (제한 없음)

 

Identifier : 다른 항목과 구분하는데 필요한 정보

 

URL : 리소스가 있는 위치를 지정

URN : 리소스에 이름을 부여

- 위치는 변할 수 있지만 이름은 변하지 않는다. ex) 책의 isbn

 

https://www.google.com/search?q=hello&hl=ko

scheme://[userinfo@]host[:port][/path][?query][#fragment]

프로토콜 : https          // http, https - HTTP Secure, ftp 등
userinfo는 URL에 사용자 정보를 포함해서 인증, 거의 사용하지 않는다. (jenkins에서 이용하는 tomcat정도?)
호스트명 : www.google.com
포트번호 : 443
패스 : /search           // path는 계층적 구조로 되어있다. /home/file1.jpg,  /members/100
쿼리 파라미터 q=hello&hl=ko

 

웹브라우저 요청 흐름

1. DNS서버에 조회를 통해 IP를 알아낸다.

2. HTTP 요청 메시지 생성한다. [GET /search?q=hello&hl=ko HTTP/1.1 HOST: www.google.com ]

3. SOCKET 라이브러리를 통해서 전달 (TCP/IP 연결, 데이터 전달)

4. TCP/IP 패킷 생성, HTTP 메시지 포함

5. 랜카드를 거쳐 서버에 요청 전송

6. 서버가 HTTP 응답 메시지를 만들어냄

7. 앞선 과정을 거꾸로 돌려서 클라이언트에게 전달

 

 

HTTP
  Stateful Stateless
  클라이언트의 이전 정보를 기억하고있음 요청마다 정보가 없음
결과 쿠키, 세션 등을 사용할 수 있다. 최소한으로 사용 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
특징 비연결성(최소한의 자원 유지,
단점  TCP/IP 연결마다 3 way handshake를 해야한다, html, js, css 등 많은 자원이 함께 다운
- HTTP 지속연결(Persistent Connections)로 문제 해결
// 요청메시지
GET /search?q=hello&hl=ko HTTP/1.1
 Host: www.google.com

 

HTTP 요청:         

1. 시작라인         

  - a : HTTP 메서드 

  - b: 요청메시지 - 요청 대상 (absolute-path[?query]) - (절대경로[?쿼리])

  - c: HTTP버전

 

// 응답메시지

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
 <body></body>
</html>

HTTP 응답:

응답메시지 

1. 시작 라인 = request-line / status-line

    status-line = HTTP-version SP status-code(200) SP reason-phrase(이유문구 ok) CRLF

 

2. HTTP 헤더 

    header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용, field-name은 대소문자 구분 없음)

    HTTP 요청에 필요한 모든 부가정보, 표준헤더가 많고 필요시 임의의 헤더 추가 가능

 

3. HTTP 메시지 바디

   byte로 표현가능한 모든 데이터

'CS' 카테고리의 다른 글

HTTP 헤더 - 헤더2 (캐시, 조건부)  (0) 2024.06.09
HTTP 헤더 - 헤더1  (0) 2024.06.09
HTTP 상태코드  (0) 2024.06.09
IP(인터넷 프로토콜), PORT, DNS  (0) 2024.06.03
Webpack, Babel, Polyfill  (0) 2024.04.07