- 웹 페이지는 객체들로 구성된다.
- 객체는 HTML 파일, JPEG 이미지, 오디오 파일 등이다.
- 웹 페이지는 보통 참조 객체들이 포함된 기본 HTML 파일이다.
- 각 객체는 URL로 참조한다. ( www.abc.com/abc/abc.pic.gif )
HTTP : hypertext transfer protocol
- 웹의 애플리케이션 계층 프로토콜
- client / server 모델
- client: 객체를 (HTTP 프로토콜로) 요청하고 받고 표시하는 브라우저
- server: 요청에 의해 객체를 (HTTP 프로토콜로) 보내주는 웹 서버
- TCP를 사용
- 클라이언트가 서버 80번 포트에 TCP 연결 요청
- 서버는 TCP 연결 요청을 수락
- 브라우저 (HTTP 클라이언트)와 웹 서버 (HTTP 서버) 사이에 HTTP 메시지 (애플리케이션 계층 프로토콜 메시지) 교환
- TCP 연결 닫음
- 캐싱을 지원 : 서버 부하 감소
- HTTP는 비상태 (stateless)
- 서버는 클라이언트의 과거 요청에 대한 정보를 유지하지 않는다.
- 상태(state)를 유지하는 프로토콜은 복잡하다
상태를 유지하는 방법
- 프로토콜의 양단: 다수의 트랜잭션에 걸쳐서 송수신측에 상태를 유지함
- 쿠키: http 메시지를 통해 상태 전달
사용자 - 서버 상태 : 쿠키(cookies)
네 가지 요소
- HTTP 응답 메시지의 쿠키 헤더 라인
- 다음 HTTP 요청 메시지의 쿠키 헤더 라인
- 사용자 호스트에 저장된 쿠키 파일 (브라우저가 관리)
- 웹 사이트 백엔드의 데이터베이스
쿠키의 용도
HTTP 요청 메시지
HTTP/1.0
- GET
- POST
- HEAD
- 요청된 객체의 헤더만 전송(서버 정보 확인, 상태체크, 버전, 최종 수정일자 확인 등 관리 목적)
HTTP/1.1
- GET, POST, HEAD
- PUT, PATCH : 수정
- DELETE : 삭제
- TRACE, CONNECT, OPTIONS
HTTP 연결
- 비지속연결 (non-persistent) HTTP
- 한 TCP 연결을 통해 최대 한 객체만 전송
- 여러 객체를 받으려면 여러 연결이 필요하다
- 객체당 2 RTT(Round Trip Time) 필요
- 비지속연결 http 응답시간 = 2RTT + 파일 전송 시간
- 각 TCP 연결에 따른 OS의 과부하
- 브라우저는 참조된 객체들을 가져오기 위해 TCP 연결 여러 개를 병렬적으로 열 수 있다.
- 지속연결 (persistent) HTTP
- 한 TCP 연결을 통해 여러 객체를 전송
- 서버는 응답을 보내고도 연결을 닫지 않는다
- 같은 클라이언트 / 서버 사이의 이후의 HTTP 메시지들은 이 연결을 통해 전송된다.
- 클라이언트는 참조된 객체를 발견하면 바로 요청한다. (커넥션을 새로 만들 필요가 없으니 기존 커넥션으로 요청)
- 모든 참조 객체들에 대해 RTT 정도만 필요하다.
HTTP 응답의 상태 코드
- 200 OK
- 40n 클라이언트 문제
- 50n 서버 문제
웹 캐시 (Web caches, proxy server)
- 기점서버의 개입 없이 클라이언트의 요구를 서비스
- 브라우저가 캐시를 사용하도록 설정
- 브라우저는 모든 HTTP 요청을 캐시로 보냄
- 캐시에 객체가 있으면, 그걸 전송
- 없으면, 캐시가 기점서버에 객체를 요청하고 그것을 클라이언트에 돌려줌
- 캐시는 서버와 클라이언트 역할을 동시에 수행
- 캐시는 주로 ISP에 의해 설치된다. (대학, 기업, 가정 ISP)
- 웹 캐시 사용 이유 ?
- 클라이언트 요청에 대한 응답 시간 감소
- 기관 접속 링크의 트래픽 감소
- 총 지연시간 = 인터넷 지연 + 접속지연 + LAN 지연
조건부 GET : 캐시의 객체가 최신이면 객체를 보내지 말라
- 객체 전송 지연 없음
- 링크 사용률 감소
- 캐시 : 캐시된 객체의 날짜를 http요청에 명시
- 서버 : 캐시의 객체가 최신이면 응답에 객체를 보내지 않음.