HTTP(HyperText Transfer Protocol)란?
- 정의
클라언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜(규약, 약속)
- 특징
단방향성 : 서버가 먼저 응답을 보낼 수 없고 클라이언트가 요청을 보내야만 응답할 수 있다.
비연결성(connectionless) : 클라이언트의 요청으로 서버와 연결된 후, 요청에 대한 응답의 데이터를 전송하면 연결을 종료한다.
따라서 실시간 통신을 할 수 없다.
- 문제점
- HTTP는 평문 통신이기 때문에 도청이 가능하다.
- 통신 상대가 검증된 상대인지 확인하지 않기 때문에 위장이 가능하다.
- 완전성을 증멸할 수 없기 때문에 면조가 가능하다.
이러한 문제점들을 해결하기 위해 HTTPS가 등장한다.
채팅같은 실시간 통신이 필요한 서비스는 어떤걸 사용해서 통신하나요?
보통 웹소켓(WebSocket)을 사용한다.
웹소켓은 TCP 기반의 통신 프로토콜이며, 데이터 전송이 끝나고 연결을 해제하지 않고 양방향 통신이 가능하다는 특성이 있다.
웹소켓이 나오기 이전에는 HTTP를 가지고 폴링(polling), 롱폴링(long-pollint), 스트리밍(streaming) 등의 실시간 통신처럼 보일 수 있게끔 하는 방식을 사용하였다.
보통 사용하는 웹소켓의 구현체를 보면, 아직도 웹소켓이 지원되지 않는 환경에서는 롱폴링 등의 방식으로 HTTP를 활용하여 실시간 통신처럼 동작하도록 하기도 한다.
HTTP 알아두면 좋은 정보
현재 세계적으로 가장 많이 사용하는것은 HTTP/1 (HTTP 버전 1.1)이다.
현재는 HTTP/3까지 메이저 버전이 발표되었으며, HTTP/1 -> HTTP/2로 가는데 대략 15년의 시간이 걸렸는데 HTTP/2가 나오고 HTTP/3가 발표되는데 4년 정도가 걸렸다고 한다.
전 세계의 HTTP/2의 점유율은 40%정도이며, HTTP/3는 아직 지원하는 곳이 많지는 않다.
HTTP/3 은 HTTP/1, HTTP/2와 다르게 TCP가 아닌 UDP 기반이다.
HTTP 메소드
- 정의
HTTP 메소드는 클라이언트가 웹 서버에게 요청의 목적이나 종류를 알리는 수단이다.
- 주요 메소드 5가지
- GET : 보통 리소스를 조회할 때 사용하며, 서버에 전달하고 싶은 데이터는 query를 통해서 전달한다. 메시지 바디를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
- POST : 주로 리소스를 새롭게 생성할 때 사용하며, 서버에 전달하고 싶은 데이터는 메시지 바디를 통해 전달한다.
- PUT : 리소스가 있으면 대체하고 리소스가 없으면 생성한다. 즉, 데이터를 덮어쓴다.
- PATCH : PUT과 마찬가지로 리소스를 수정할 때 사용하지만, PATCH는 리소스를 일부분만 변경할 때 사용한다.
- DELETE : 리소스를 제거할때 사용한다.
- 메소드 속성
- 안전(Safe Methods)
계속 호출해도 리소스를 변경하지 않는 특성
- 멱등(Idempotent Methods)
동일한 요청을 여러 번 보내도 한 번 보내는 것과 똑같은 결과를 갖는 것 Get, PUT, DELETE는 멱등하다고 볼 수 있지만, POST나 PATCH는 멱등하다고 볼 수 없다.
- 캐시가능(Cacheable Methods)
응답 결과를 서버에 캐시 해서 사용해도 되는 메소드 GET, HEAD, POST, PATCH가 캐시가 가능하지만 구현이 어려워 실제로는 GET과 HEAD만 주로 캐싱이 쓰인다고 한다.
HTTP 상태코드
- 정의
클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주기 위한 정보
- 종류
- 1xx (Informational): 요청이 수신되어 처리중
- 2xx (Successful): 요청 정상 처리
- 200 OK : 요청 성공
- 201 Created : 요청 성공해서 새로운 리소스가 생성됨
- 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음
- 204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 (보통 리다이렉션처리)
- 301 Moved Permanently : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 302 Found : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 303 See Other : 리다이렉트시 요청 메서드가 GET으로 변경
- 304 Not Modified : 캐시를 목적으로 사용
- 307 Temporary Redirect : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다.)
- 308 Permanent Redirect : 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 400 Bad Request : 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증이 필요함
- 403 Forbidden : 서버가 요청을 이해했지만 승인을 거부함
- 404 Not Found : 요청 리소스를 찾을 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
HTTP 통신흐름
브라우저에 www.naver.com을 치면 어떤일이 일어나나요?
- 웹 브라우저에 www.naver.com 입력.
- 사용자가 입력한 URL 주소 중 도메인 네임 부분을 DNS 서버에 검색하고, DNS서버에서 해당 도메인 네임에 해당하는 IP주소를 찾아온다.
- HTTP 프로토콜을 사용하여 페이지 URL정보와 찾아온 IP주소를 포함하는 HTTP 요청 메세지를 생성하고, 생성된 HTTP 요청 메세지는 TCP 프로토콜을 사용하여 인터넷 망을 통해 해당 IP주소의 컴퓨터로 전송된다.
- HTTP 요청 메세지를 받은 컴퓨터(서버)는 웹 페이지 URL 정보 중 PATH와 HTTP Method에 맞는 액션을 취한다. (여기서는 naver 페이지를 띄우기 위해 필요한 html 등의 리소스를 찾을 것이다.)
- 생성된 응답 데이터는 또 다시 HTTP 프로토콜을 사용하여 HTTP 응답 메세지로 만들어지고 TCP 프로토콜을 사용하여 인터넷 망을 통해 요청했던 컴퓨터(클라이언트)로 전송된다.
- 도착한 HTTP 응답 메세지는 웹 브라우저에 의해 브라우저 렌더링 과정을 거쳐 화면에 출력되어 사용자가 볼 수 있게 된다.
브라우저 렌더링 과정
1~4. HTML 파일과 CSS 파일을 파싱해서 DOM Tree*, CSSOM Tree*를 만든다. (Parsing)
- 두 Tree를 결합하여 Rendering Tree*를 만든다. (Style)
- Rendering Tree에서 각 노드의 위치와 크기를 계산한다. (Layout)
- 계산된 값을 이용해 각 노드를 화면상의 실제 픽셀로 변환하고, 레이어를 만든다. (Paint)
- 레이어를 합성하여 실제 화면에 나타낸다. (Composite)
DOM Tree, CSSOM Tree
Render Tree
'CS' 카테고리의 다른 글
22.11.25 / CS특강 / TCP/IP (0) | 2022.12.01 |
---|---|
22.11.25 / CS특강 / HTTPS (0) | 2022.11.29 |
22.11.25 / CS특강 / IP주소, DNS, 포트, 패킷 통신 (0) | 2022.11.29 |
22.11.25 / CS특강 / UDP (0) | 2022.11.29 |
22.11.25 / CS특강 / OSI 7계층 (0) | 2022.11.29 |