웹 서버는 인터넷의 데이터를 저장하고, 클라이언트가 요청한 데이터를 제공한다.
클라이언트는 서버에게 HTTP 요청을 보내고 서버는 요청된 데이터를 HTTP응답으로 돌려준다.
브라우저가 웹 페이지를 열어볼 때, 브라우저는 HTTP 요청을 서버로 보낸다. HTTP요청을 받은 서버는 요청받은 객체를 찾고 성공했다면, 객체의 타입, 길이 등의 정보와 함께 HTTP 응답에 실어서 클라이언트에게 보낸다.
HTTP는 웹에서 전송되는 객체에 MIME이라는 데이터 포맷 라벨을 붙인다. 원래는 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제를 해결하기 위해 설계되었기 때문에 MIME(Multipurpose Internet Mail Extentions)라는 이름이 붙었다.
MIME타입은 슬래쉬로 구분된 primary object type과 specific subtype으로 이루어진 문자열 라벨이다.
서버 리소스 이름은 uniform resource identifier URI라고 불린다. 정보 리소스를 고유하게 식별하고, 위치를 지정할 수 있다.
URI의 가장 흔한 형태. 특정 서버의 한 리소스에 대한 구체적인 위치를 서술한다.
리소스가 정확히 어디에 있고 어떻게 접근 할 수 있는지 분명히 알려준다.
URL은 세 부분으로 이루어진 표준 포맷을 따른다.
Http 트랜잭션은 요청 명령과 응답 결과로 구성되어 있다. 이 상호작용은 HTTP메시지라고 불리는 데이터를 이용해 이루어 진다.
모든 요청 메시지는 한개의 메서드를 갖는다. 메서드는 서버에게 어떤 동작이 취해져야 하는지 말해준다.
흔히 쓰이는 HTTP메서드는 다음과 같다
HTTP 메서드 | 설명 |
---|---|
GET | 서버에서 클라이언트로 지정한 리소스를 보내라 |
PUT | 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라 |
DELETE | 지정한 리소스를 서버에서 삭제하라 |
POST | 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라 |
HEAD | 지정한 리소스에 대한 응답에서 HTTP 헤더 부분만 보내라. |
HTTP응답 메시지는 상태 코드와 함께 반환된다.
HTTP는 resason phrase도 함께 보내는데 이는 설명을 위해 포함된 부분이다. 그렇기 때문에 reason phrase가 다르더라도 상태코드가 동일하다면 모두 같은 것으로 취급한다.
HTTP 메시지는 세부분으로 이루어 진다.
HTTP는 애플리케이션 계층 프로토콜이다.
그렇기 때문에 네트워크 통신의 핵심적인 세부사항에 대해 신경 쓰지 않아도 된다.
대신 세부사항은 TCP/IP 프로토콜에 의존한다.
TCP는 1. 오류 없는 데이터 전송. 2. 순서에 맞는 전달 3. 조각나지 않는 데이터 스트림을 제공한다.
TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 해준다.
TCP커넥션이 맺어지면, 클라이언트와 서버간에 교환되는 메시지가 없어지거나 손성되거나 순서가 뒤바뀌는 일은 절대 없다.
HTTP는 TCP/IP 5계층에서 TCP위의 계층이며 TCP는 IP위의 계층이다.
클라이언트가 서버에 메시지를 전달하기 위해선 IP주소와 포트번호를 사용해서 서버와 TCP/IP커넥션을 맺어야 한다.
HTTP 서버의 IP주소와 포트번호를 알아내는 방법은 URL을 사용하는 것이다.
일반적으로 www.naver.com과 같은 Domain은 DNS를 통해 쉽게 IP로 변환 될 수 있으므로 IP는 쉽게 찾을 수 있다.
포트 번호의 경우 HTTP 통신이라면 포트 번호가 빠졌을 경우 디폴트 값으로 80이라고 가정한다.
우리가 웹 브라우저를 통해 서버의 HTML리소스를 보는 과정은 다음과 같다.