웹의 구성요소들이 서로 대화할 때 사용하는 프로토콜
전세계의 웹서버로부터 대량의 데이터(웹 콘텐츠)를 사람들의 PC에 설치된 웹 브라우저에 올려준다.

모든 종류의 데이터 타입은 리소스가 될 수 있다.
이를 구분하기 위해 MIME타입이라는 데이터포맷 라벨을 명시한다.
ex)
URI(uniform resource identifier) 서버 리소스를 고유하게 식별하기 위한 이름
2가지로 나뉜다.
URL(uniform resource locator)
어떤 리소스를 식별하고, 그것의 위치를 파악

URN(uniform resource name)
리소스의 위치에 영향받지 않는 이름의 역할(즉 리소스의 위치를 옮기더라도 문제없이 작동한다.)
ex) urn:ietf:rfc:2141
HTTP 트랜젝션은 요청명령과 응답결과로 구성되어있다.
하나의 작업을 위해 여러 http트랜젝션이 필요할 수 있다.
(HTML, 이미지 등의 리소스 각각이 여러 다른 서버에 위치한 경우)
서버에서 어떤 동작이 취해져야하는지를 알려준다.
HTTP 요청 메시지는 한개의 HTTP 메서드를 가진다.
| HTTP 메서드 | 설명 |
|---|---|
| GET | 서버에서 클라이언트로 지정한 리소스를 보내라 |
| PUT | 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라 |
| DELETE | 지정한 리소스를 서버에서 삭제하라 |
| POST | 클라이언트 데이터를 서버 게아트웨이 애플리케이션으로 보내라 |
| HEAD | 지정한 리소스에 대한 응답에서, HTTP헤더 부분만 보내라 |
모든 HTTP응답 메시지는 상태 코드와 함께 반환된다. (200,404...)
메세지는 다음으로 구성된다.

TCP 커넥션을 통해 한 서버에서 다른 서버로 옮겨간다.
TCP/IP : 패킷 교환 네트워크 프로토콜의 집합
다음을 보장한다.
TCP에서는 커넥션을 맺기 위해 서버의 IP주소와 포트번호가 필요하다.
이걸 어떻게 알아낼 수 있을까?
URL #1 : http://127.0.0.1:80/index.html
URL #2 : http://127.0.0.1/index.html
위와 같이 url을 통해 ip와 포트번호를 알아낼 수 있다.
127.0.0.1은 ip주소에 해당하고, 80은 포트번호에 해당한다.
두개는 동일한 url로 포트번호가 생략되었다면 http프로토콜에서는 기본 80을 사용한다.
URL #3 : http://www.domain.com/index.html
위와 같이 서버의 주소가 ip가 아닌 글자로된 도메인, 호스트명일 경우에는 DNS(domain name service) 서버에서 ip로 변환하여 알 수 있다.
url을 통한 서버 정보를 이용해 TCP커넥션을 맺고나면 요청을 보내고, 응답을 받을 수 있다.
커넥션이 닫히면 웹브라우저는 응답받은 리소스를 보여준다.
클라이언트와 서버 사이에 위치한 http중개자.(클라이언트를 대신해 프록시가 서버에 접근한다)
보안, 요청과 응답을 필터링하기 위해 주로 사용된다.
많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 http 창고
다른 애플리케이션과 연결, 다른 서버의 중개자로 동작하는 서버
http 트래픽을 다른 프로토콜로 변환하기 위해 주로 사용된다.
단순히 http통신을 전달하기한 하는 프록시
대표적으로 암호화된 SSL 트래픽을 http커넥션으로 전송함으로써 웹 트래픽만 허용하는 방화벽을 통과시키는데 사용될 수 있다.
자동화된 http 요청을 만드는 준지능적 웹클라이언트
웹브라우저 이외에도 스파이더, 웹로봇 등이 있다.
참고
[HTTP 완벽 가이드] 저. 데이빗 고올리, 브라이언 토티