카테고리 없음

2022.08.15 - http 웹 기본지식 - (2)

기묜몬 2022. 8. 21. 20:31

1. 웹브라우저 요청 흐름

(1) url로 보냄

(2) 서버를 찾아야함(DNS 서버 조회)

(3) 아이디, 포트 정보 찾음

(4) http요청 메세지를 생성 (get,host등등 정보 들어있음) -> 인터넷 망으로 던짐 

(5) 요청 패킷 도착하면 서버가 tcp/ip 패킷을 지우고 http메세지를 해석한다. -> http응답 메세지를 생성함

(6) 응답 패킷이 웹브라우저에 도착 -> 웹브라우저가 HTML랜더링을 한다.

 

2. HTTP 

HTTP 메세지에 모든것을 전송할 수 있다.

html, text, image, 음성, 영상, 파일, json, xml(api) 거의 모든 형태의 데이터를 전송 가능 

 

2-1. HTTP의 특징

- 클라이언트 서버 구조이다.

- 무상태 프로토콜

- 비연결성 

- 보낼때도 받을때도 HTTP 메세지로 연결한다.

- 단순하고, 확장성이 좋다. 

 

2-2. HTTP의 클라이언트 서버 구조 

- 클라이언트가 http메세지를 통해 서버에 요청을 보내고, 응답을 대기하고, 

서버가 요청에 대한 결과를 만들어서 응답한다. 

 

 

2-3. HTTP는 무상태 프로토콜을 지향한다. (Stateless)

- Stateful, Stateless 의 차이 

 

1) 상태 유지 : stateful (항상 같은 서버가 유지되어야 함)

ex) 중간에 다른 점원으로 바뀔때 상태 정보를 다른 점원에게 미리 알려줘야함. 

 

2) 무상태 : Stateless (아무 서버나 호출해도 됨)

ex) 상태정보를 그때그때 점원에게 전송함. 중간에 점원이 바뀌어도 아무 문제가 없음

 -> 갑자기 서버1 장애가 나면 서버2로 전달하면 됨 

 -> 선착순 이벤트, 명절 ktx등 같은 시간에 딱 맞추어 발생하는 대용량 트래픽사용이 예상될때 최대한 스테이스리스 하게 서버를 설계해야한다!!

 

 - Stateless의 한계 

로그인이 필요 없는 단순한 서비스소개 화면에는 괜찮으나 로그인 사용자의 경우 로그인상태를 유지해야하기 때문에 브라우저 쿠키과 서버 세션등을 사용해서 상태유지를 사용한다.

 

2-4. 비연결성 

- 서버가 동시에 유지해야하는 자원을 요청할때만 연결하고 끊어버리기 때문에 최소한의 자원을 사용할 수 있다.

- 초 단위 이하의 빠른 속도로 응답한다. 

- 비연결성의 한계 

 1) TCP/IP 연결을 새로 맺어야한다. (3way handshake 시간 추가됨)

 2) 웹브라우저로 사이트를 요청하면 html뿐만 아니라 css, javascript 등 수 많은 자원이 함께 다운로드됨 

-> 현재는 HTTP 지속연결(Persistent Connection)로 문제가 해결됨 

  지속연결 : 연결 요청하고, 응답을 받는다, 그 다음 연결을 유지한다. 

 

2-5. HTTP 메세지

- 요청 메세지와 응답 메세지로 구성되어있고, 구조는 다름 

 

-  요청 메세지

GET/search?q=hello&hl=ko HTTP/1.1

request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)

- http method : GET, POST, PUT, DELETE ... 서버가 수행해야할 동작을 지정함 

  GET : 리소스 조회

  POST : 요청 내역 처리 

 

 

 

- 응답 메세지

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

(시작라인) 

status-line = HTTP-version SP status-code SP reason-phrase CRLF

HTTP/1.1 200 OK 

-  status-code (상태코드) : 200(성공), 400(클라이언트 요청 오류), 500(서버 내부 오류)

 

(헤더)

header-field : field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)

Content-Type: text/html;charset=UTF-8
Content-Length: 3423

- http 전송에 필요한 모든 부가정보 포함 (메세지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트(브라우저-크롬 등) 정보, 캐시관리 정보 등등)

 

3. HTTP 메서드 (HTTP API 만들어보기)

* 좋은 리소스 식별 방법

1) 회원을 등록, 수정, 조회하는것을 모두 배제하고 "회원" 이라는 리소스만 식별하면 된다.

   -> 회원 리소스를 URL에 매핑한다. 

2) 리소스와 해당 리소스를 대상으로 하는 행위를 분리한다.

   리소스 : 회원

   행위 : 조회, 등록, 삭제, 변경 

3) 리소스는 명사, 행위는 동사 (get, post....)