Hyper Text Transfer Protocol으로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜
웹에서 이루어지는 모든 데이터 교환의 기초로, 클라이언트-서버 프로토콜로, 수신자 측에 의해 요청이 초기화 되는 프로토콜이다.
HTTP는 애플리케이션 계층의 프로토콜로, 신뢰 가능한 전송 프로토콜이라면 이론상으로 무엇이든 사용할 수 있다. 높은 확장성으로 문서 뿐만이 아닌, 이미지, 비디오, 폼의 결과 전송등도 할 수 있다.
특징
간단하다
사람이 읽을 수 있을 정도로 간단하게 고안되었다. 사람이 읽고 이해할 수 있어, 테스트하기 쉽고 진입장벽이 낮다.
확장 가능하다
HTTP/1.0에서 등장한 HTTP 헤더 덕분에 확장하고 실험하기 쉬워졌다. 클라이언트와 서버가 헤더의 시맨틱에 대하여 합의만 된다면, 언제든 새로운 기능을 추가할 수 있다.
상태가 없지만, 세션은 있다
HTTP는 상태를 저장하지 않는다(Stateless). 동일한 연결 상에 연속하여 전달된 두 요청 사이에는 연결고리가 존재하지 않는다. 하지만, 헤더 확장성을 이용하여 동일한 상태를 공유하기 위해 각각의 요청에 대한 세션을 만들도록 HTTP 쿠키를 추가하여 상태가 있는 세션을 만들도록 해준다.
HTTP/0.9
1991년에 나왔으며 초기에는 버전이 존재하지 없었는데 구별하기 위해 추후에 설정
특징
단순한 프로토콜로 요청은 단일 라인으로 구성되며 리소스에 대한 경로로 가능한 메소드는 GET 이 유일하다.
GET /mypage.html
응답 또한 단순하게 파일 내용 자체로 구성된다
<HTML>About Web</HTML>
특징으로는 HTTP 헤더가 없어 HTML 파일만 전송될 수 있으며, 다른 유형의 문서는 전송될 수 없다. 상태 혹은 오류 코드또한 없어 특정 HTML 파일을 사람이 처리할 수 있도록, 파일 내부에 문제에 대한 설명과 함께 응답을 실어 보냈다.
HTTP/1.0
1996년에 나왔으며 브라우저와 서버가 융통성을 가지도록 확장
특징
버전 정보가 각 요청 사이로 전송되기 시작했다
상태코드라인이 응답의 시작에 붙어 전송되어, 브라우저가 요청에 대한 성공과 실패를 알 수 있고, 결과에 대한 처리를 할 수 있게 되었다
HTTP 헤더 개념이 요청과 응답을 위해 도입되어, 메타데이터 전송을 허용하며 프로토콜을 유연하고 확장 가능하게 만들었다
요청의 예시
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
응답의 예시
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
<IMG SRC="/myimage.gif">
</HTML>
한계
커넥션당 하나의 요청과 하나의 응답만 처리 가능했으며, 추후에 개선된다.
HTTP/1.1
1997년에 등장하여 HTTP의 첫번째 표준으로 자리잡음
특징
커넥션을 재사용 하여 시간을 절약할 수 있다
파이프라이닝을 추가하여, 요청에 대한 응답이 완전히 전송되기 전 두번째 요청을 전송하여 커뮤니케이션 레이턴시를 낮췄다