2021-11-24 그림으로 배우는 HTTP & Network (10주차)
HTTP에 기능을 추가한 프로토콜
HTTP의 병목현상
- 1개의 커넥션으로 1개의 리퀘스트만 보낼 수 있다.
- 리퀘스트는 클라이언트에서만 시작할 수 있다. 리스폰스만 받는 것은 불가능
- 리퀘스트 - 리스폰스 헤더를 압축하지 않은 체로 보낸다.
- 매번 같은 헤더를 보내는 것은 낭비
- 데이터 압축을 임의로 선택할 수 있다
Ajax에 의한 해결 방법
- Ajax(Asynchronous JavaScript + XML) 웹페이지 일부분만 고쳐쓸 수 있는 비동기 통신 방법
Comet에 의한 해결 방법
- Comet은 서버 측의 콘텐츠에 갱신이 있었을 경우, 클라이언트로부터 리퀘스트를 기다리지 않고 클라이언트에 보내기 위한 방법
- 통상 리퀘스트가 오면 리스폰스를 바로 반환하지만 Comet에서는 리스폰스를 보류 상태로 해 두고, 서버 콘텐츠가 갱신되었을 때에 리스폰스를 반환
- 서버에 갱신된 콘텐츠가 있으면 바로 클라이언트에 반영할 수 있다
- 커넥션 유지하는 시간이 길어지기에 리소스 계속 소비
SPDY
- TCP/IP의 애플리케이션 계층과 트랜스포트 계층사이에 새로운 세션 계층을 추가
- 다중화 스트림
- 단일 TCP 접속을 통해서 복수의 HTTP 리퀘스트를 무제한으로 처리할 수 있다
- 리퀘스트의 우선순위 부여
- 무제한으로 병렬처리할 수 있지만, 각 리퀘스트에 우선 순위를 할당할 수 잇따
- HTTP 헤더 압축
- 리퀘스트와 리스폰스의 HTTP 헤더를 압축한다 - 적은 패킷 수와 송신 바이트로 통신가능
- 서버 푸시 기능
- 서버에서 클라이언트로 데이터를 푸시하는 서버 푸시기능 지원
- 리퀘스트를 기다리지 않고 데이터를 보낼 수 있다
- 서버 힌트 기능
- 서버가 클라이언트에게 리퀘스트 해야 할 리소스를 제안할 수 있다
브라우저에서 양방향 통신을 하는 WebSocket
WebSocket 프로토콜
- 웹 서버와 클라이언트가 한번 접속을 확립하면 그 뒤의 통신을 모두 전용 프로토콜로 하는 방식으로 JSON이나 XML, HTML이나 이미지 등 임의 형식의 데이터를 보내게 된다.
- 서버 푸시 기능
- 통신량의 삭갑
- 한번 확립하면 자주 접속을 하는 오버헤드가 적어지고 통신량을 줄일 수 있다.
- 핸드쉐이크/리퀘스트
- HTTP의 Upgrade헤더 필드를 사용해서 프로토콜을 변경하는 것으로 핸드쉐이크를 실시한다
- 핸드쉐이크/리스폰스
- 리퀘스트에 대한 리스폰스는 상태 코드 [101 Switching Protocols]로 반환
Written on November 24, 2021