클라이언트 - 리소스를 요구
서버 - 리소스를 제공
HTTP는 반드시 한 쪽은 클라이언트, 다른 한 쪽은 서버의 역할을 담당
반드시 클라이언트 측에서 리퀘스트를 보내고, 서버 측에서 리스폰스가 되돌아 온다.
HTTP는 클라이언트로 부터 리퀘스트(요청,request)가 송신되며, 그 결과가 서버로부터 리스폰스(응답,response)로 되돌아온다. 즉, 반드시 클라이언트 측으로 부터 통신이 시작된다. 서버 측은 리퀘스트를 받지 않고는 리스폰스를 송신하는 일이 없다.
Request, Response 송신 예
// Request
GET /index.html HTTP /1.1
Host: www.youngjin.com
// Response
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
...
request
"GET" : 서버에 요구하는 종류, 메소드라고 불리는 것
"/index.html" : 요구 대상인 리소스를 나타내고 있다. 리퀘스트 URI라고 한다.
"HTTP/1.1" : 클라이언트 기능을 식별하기 위한 HTTP 버전번호
--> HTTP 서버 상에 있는 /index.html라는 리소스가 필요하다는 리퀘스트이다.
response
"HTTP/1.1" : 서버의 HTTP 버전을 나타냄.
"200 OK" : 리퀘스트의 처리 결과를 나타내는 상태 코드와 설명
"Date: ~~" : 리스폰스가 발생한 일시, 헤더 필드라고 불리는 것 중 하나
빈줄 다음 아래 부분 : 빈 줄로 구분하고 바디라고 불리는 리소스 본체
HTTP는 상태를 계속 유지하지 않는 스테이트리스(stateless) 프로토콜이다.
과거의 리퀘스트, 리스폰스 정보를 가지고 있지 않다.
-> 많은 데이터를 매우 빠르고 확실하게 처리하는 범위성(scalability)을 확보하기 위함.
이후 상태를 유지해야하는 요구가 늘어남에 따라 cookie라는 기술이 도입 되었다.
HTTP는 URI를 사용하여 인터넷 상의 리소스를 지정한다.
URI덕분에 인터넷 상의 어떤 장소에 있는 리소스도 호출이 가능하다.
서버에 임무를 부여한다.
하나의 HTML 문서에 여러개의 이미지 등이 포함된 웹페이지를 리퀘스트하면 다량의 통신이 발생. -> 리퀘스트를 보낼 때 마다 매번 TCP연결, 종류를 하게되어 통신량이 늘어남.
TCP 연결 문제를 해결하기 위해 고안.
어느 한 쪽이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지.
지속 연결은 여러 리퀘스트를 보낼 수 있도록 파이프라인화를 가능하게 한다.
리스폰스를 기다리지 않고 바로 다음 리퀘스트를 보낼 수 있다. -> 여러 리퀘스트를 병행해서 보내는 것이 가능하기 때문에 일일이 리스폰스를 기다릴 필요가 없다.