웹 페이지는 여러 개의 객체(objects)로 구성됨
이 객체들은 서로 다른 웹 서버에 저장될 수도 있음
웹 페이지는 기본 HTML을 포함하고,
HTML 파일은 여러 참조 객체를 가짐
1. HTTP 개요
: HyperText Transfer Protocol
Web의 응용 계층 프로토콜(application layer protocol)로,
브라우저와 웹 서버 간의 데이터 요청/응답 관리
웹 브라우저 역할(ex. Safari)로, 요청을 보냄
(받은 웹 객체를 화면에 받고 표시)
웹 서버 역할(ex. Apache)로, 클라이언트의 요청을 받음
(HTTP 응답으로 웹 객체를 전송함)

HTTP request : 사용자가 웹 브라우저를 통해 요청 보냄
HTTP response : 웹 서버가 해당 요청을 처리 후, 응답 데이터를 보냄
(ex. HTMl 문서, 이미지, 웹 객체)
HTTP는 Transport layer에서 TCP 사용
1) Client가 Server의 port로 TCP 연결을 생성 (소켓 생성)
2) Server가 Client의 TCP 연결을 수락
3) 브라우저(HTTP Client) ↔ 웹 서버 간 HTTP 메시지 교환
(애플리케이션 계층 메시지)
4) 통신 종료 시 TCP 연결도 종료
Server는 Client의 과거 요청 정보를 저장하지 않음
-> HTTP 요청은 독립적이고, 이전 요청과 무관
State를 유지하는 프로토콜은 어려움
(히스토리를 기억 / 동기화 -> 복잡성 증가)
2. HTTP 연결 방식
하나의 HTTP 객체를 전송할 때마다 새로운 TCP 연결 생성
1) TCP 연결 열기
2) 하나의 객체(object) 전송
3) TCP 연결 닫기
사용자가 요청한 url이 다음과 같을 경우
www.someSchool.edu/someDepartment/home.index
(텍스트 + 10개의 JPEG 이미지 포함)


HTTP 클라이언트가 port=80으로 TCP 연결 요청
서버는 port=80에서 연결 요청을 수신 대기하다가, 수락
클라이언트는 연결된 소켓에 HTTP request message 전송 (url 정보 포함)
/someDepartment/home.index
서버는 요청을 처리하여 HTTP response message 생성 (요청된 객체 포함, html)
소켓을 통해 클라이언트에게 전송
서버가 요청된 객체를 전송하면 TCP 연결을 즉시 닫음
클라이언트가 HTML이 담긴 HTTP response message를 수신
HTML을 파싱(parsing)
→ 내부에 10개의 이미지가 포함된 것 확인
→ 다시 TCP 연결해야 되겠다는 생각을 함
10개의 객체(이미지)를 받기 위해, 1~5단계 반복
(이미지마다 TCP 연결 생성)
한 번 TCP 연결하면, 여러 개의 객체 연속적으로 전송 가능
1) TCP 연결 열기
2) 여러 객체 전송
3) 마지막에 TCP 연결 닫기
클라이언트가 서버로 작은 패킷을 보낼 때,
서버로부터 응답이 돌아오기까지 걸리는 시간

3. HTTP 메시지 형식
ASCII (사람이 읽을 수 있는 문자 형식)로 구성
(바이너리 x)


GET /index.html HTTP/1.1
클라이언트가 서버에 추가 정보 제공
헤더의 끝을 나타냄 (carriage return + line feed)
(이 줄 이후에 메시지 body가 올 수 있음, POST 요청 시)
서버 쪽에 데이터를 새로 등록하거나 처리 요청할 때 사용
데이터를 서버에 요청할 때 사용
헤더만 요청할 때 사용
서버에 파일 또는 객체 업로드할 때 사용

(사용 중인 HTTP 버전 / 상태 코드 / 의미 설명)
HTTP/1.1 200 OK
응답에 대한 메타 데이터 포함
실제 클라이언트가 요청한 객체
헤더 다음에 위치하며, 아래와 같은 형태로 시작
data data data data data ...