9.1 HTTP를 기본으로 하는 프로토콜
HTTP 규격이 만들어졌을 때 주로 HTML로 작성된 문서를 전송하기 위한 프로토콜로 HTTP를 생각했다. 하지만 시간이 흐르면서 웹의 용도는 크게 변하고 있고, 그로인해 HTTP라는 프로코톨의 제한이나 한계가 생겨났다. 그래서 HTTP를 기반으로 추가하는 형태로 새로운 프로토콜이 몇 가지가 구현되었다.
9.2 HTTP의 병목 현상을 해소하는 SPDY
HTTP의 병목 현상
페이스북, 트위터 등의 SNS에서는 많은 사람들이 작성한 정보를 실시간으로 볼 수 있다. 이렇게 갱신된 정보를 가능한 빨리 실시간으로 표시하기 위해서는 서버상의 정보가 갱신되었을 때, 그것을 클라이언트 화면에 반영할 필요가 있다. 하지만 HTTP에서는 이러한 처리를 제대로 할 수가 없다.
HTTP에서는 서버의 정보가 변경되었는지 확인하기 위해서 클라이언트가 항상 서버측에 확인하러 가야한다. 서버상의 정보가 갱신되지 않은 경우 불필요한 통신이 발생하게 된다.
- Ajax에 의한 해결방법 : Ajax는 웹 페이지의 일부분만 고쳐쓸 수 있는 비동기 통신 방법이다. 페이지의 일부분만 갱신되기 때문에 리스폰스로 전송되는 데이터 양이 줄어든다.
- Comet에 의한 해결방법 : 서버 측의 콘텐츠 갱신이 있는 경우 클라이언트의 리퀘스트를 기다리지 않고 클라이언트에 보내기 위한 방법으로 리스폰스를 보류 상타로 해두고 갱신시 리스폰스를 반환한다. 단 리스폰스를 보류하기 위해 커낵션을 유지하는 시간이 길어진다.
위 방법을 통해 어느정도 개선은 되었으나 HTTP 프로토콜의 제약은 없앨 수 없었다. 근본적인 개선을 위해서는 프로토콜 레벨에서의 개선이 필요하다. SPDY는 HTTP가 안고 있던 병목 현상을 프로토콜 레벨에서 해소하기 위해 개발되고 있는 프로토콜이다.
SPDY 설계와 기능
SPDY는 TCP/IP의 애플리케이션 계층과 트랜스포트 계층 사이에 새로운 세션 계층을 추가하는 형태로 동작한다. 또 보안을 위해서 표준으로 SSL을 사용하도록 되어 있다. SPDY를 사용하면 다음과 같은 기능을 HTTP에 추가할 수 있다.
- 다중화 스트림
- 리퀘스트의 우선 순위 부여
- HTTP 헤더 압축
- 서버 푸시 기능
- 서버 힌트 기능
SPDY를 사용하려면 웹 콘텐츠 측은 할게 없는데 웹 브라우저와 웹 서버는 SPDY에 대응하고 있어야 한다. SPDY는 기본적으로 한 개의 도메인과의 통신을 다중화할 뿐 웹 사이트에서 복수의 도메인으로 리소스를 사용하고 있는 경우에는 그 효과가 한정적이다. 또 SPDY는 HTTP의 병목현상을 해결하는 좋은 기술이지만 대부분 웹 사이트의 문제는 HTTP의 병목현상 때문만은 아니다.
9.3 브라우저에서 양방향 통신을 하는 WebSocket
WebSocket은 웹 브라우저와 웹 서버를 위한 양방향 통신 규격으로 Ajax, Comet에서 사용하는 XMLHttpRequest의 결점을 해결하기 위한 기술로서 개발이 진행되고 있다.
WebSocket은 한 번 접속을 확립하고 나면 그 뒤에 통신은 어느쪽에서도 할 수 있다. 주요 특징으로는 다음과 같은 것이 있다.
- 서버 푸시 기능
- 통신량의 삭감
- 핸드쉐이크/리퀘스트
- 핸스쉐이크/리스폰스
- WebSocket API
9.4 등장이 기다려지는 HTTP/2.0
9.5 웹 서버 상의 파일을 관리하는 WebDAV
WebDAV는 웹 서버의 콘텐츠로 직접 파일 복사나 편집 작업 등을 할 수 있는 분산 파일 시스템이다.
HTTP/1.1을 확장한 WebDVA
- 컬렉션 Collection : 여러 개의 리소스를 한꺼번에 관리하기 위한 개념
- 자원 Resource : 파일이나 컬렉션
- 프로퍼티 Property : 리소스의 프로퍼티를 정의 ‘이름=값’의 형식으로 이루어짐
- 잠금 Lock : 파일을 편집할 수 없는 상태로 한다.
WebDAV에서 추가된 메소드와 상태코드
- PROPFIND : 프로퍼티 취득
- PROPPATCH : 프로퍼티 변경
- MKCOL : 컬렉션 작성
- COPY : 리소스 및 프로퍼티 복제
- MOVE : 리소스 이동
- LOCK : 리소스 잠금
UNLOCK : 리소스 잠금 해제
- 102 Processing
- 207 Multi-Status
- 422 Locked
- 424 Failed Dependency
- 507 Insufficient Storage