자료 저장소



HTTP (HyperText Transfer Protocol)


WWW에 내재되어 정보를 주고 받을 수 있는 프로토콜로 팀 버너스리(Tim Berners-Lee)에 의해 1989년 부터 1991년에 발명되었다. 주로 HTML 문서를 주고받는 데에 쓰인다. TCP와 UDP를 사용하며, 80번 포트를 사용한다. 1996년 버전 1.0, 그리고 1999년 1.1이,  2015년 2.0이 각각 발표되었다.


HTTP0.9 - The one-line protocol


HTTP 초기 버전에는 버전 번호가 없었는데 이후에 차후 버전과 구별하기 위해 0.9로 불리게 되었다. 요청은 단일라인으로 구성되며 리소스 경로로 가능한 메서드는 GET 이 전부였다.


HTTP1.0 - Building extensibility


브라우저와 서버 모두 좀 더 융통성을 가지도록 빠르게 확장되었다.


  • 각 요청 내에 버전정보가 포함되었다.
  • 상태 코드가 응답의 시작 부분에 붙어서 전송되며, 브라우저가 성공과 실패를 알 수 있고 그 결과에 대한 동작을 할 수 있게 되었다.
  • 요청과 응답에 대해  HTTP 헤더 개념이 도입되어 메타 데이터를 전송하고, 프로토콜을 매우 유연하고 확장 가능하게 만들었다.
  • 새로운 HTTP 헤더 덕분에 일반 HTML 파일이 아닌 다른 문서를 전송할 수 있는 기능이 추가되었다. (Content-type 헤더)


HTTP1.1 - The standardized protocol


1995년 이후 다양한 HTTP1.0의 다양한 구현과 혼란스러운 사용이 동시에 진행되어, HTTP1.0 표준 문서 출간 전부터 표준화가 진행되었다.

첫번째 표준 버전인 HTTP1.1은 HTTP1.0이 발표되고 나서 몇 달 후인 1997년 1월에 발표되었다. HTTP1.1은 모호한 부분들을 명확히 하고 많은 개선사항을 도입했다.


  • connection을 재사용 할 수있게 하여 단일 원본 문서에 포함된 리소스 표시를 위해 connection을 다시 여는 시간을 절약할 수 있다.
  • 파이프라이닝이 추가되어 첫번째 요청에 대한 응답이 완료되기 전에 두번째 요청을 보내어 통신 대기시간을 단축시켰다.
  • 많은양의 응답도 지원하였다.
  • 추가 캐시 제어 메커니즘이 추가되었다.
  • 언어, 인코딩, 타입을 포함한 컨텐츠 타협이 도입되어 클라이언트와 서버가 가장 적합한 콘텐츠를 교환할 수 있게 하였다.
  • Host 헤더 덕분에 동일한 IP 주소에서 다른 도메인을 호스트 할 수 있으므로 서버 배치가 가능해졌다.


HTTP2 - A protocol for greater performance


2015년 HTTP2가 발표되었다. 몇 년에 걸쳐, 웹 페이지는 매우 복잡해지면서, 종종 진정한 애플리케이션이 된다. 디스플레이되는 시각적 미디어의 양에 덧붙여 상호작용을 추가하기 위한 스크립트의 양과 크기는 점점 더 많이 증가하고 있다.

더 많은 데이터들이 더 많은 요청 너머로 전송되고 있다. HTTP/1.1 커넥션은 올바른 순서로 전송되는 요청을 필요로 한다. 또한, 몇몇 병렬 커넥션이 이론적으로 사용 가능한 경우(일반적으로 5와 8 사이에서), 여전히 많은 양의 오버헤드와 복잡도가 남아 있다. 예를 들어, HTTP 파이프라이닝은 디플로이 악몽임이 확실해졌다.


2010년 상반기에 구글은 실험 프로토콜 SPDY를 구현하여 클라이언트와 서버간에 데이터를 교환할 수 있는 대안을 보여주었다. 브라우저와 서버에서 작업하는 개발자들의 관심이 높아졌고, 응답성의 증가를 정의하고, 전송된 데이터 복제 문제를 해결함으로써 SPDY는 HTTP2 프로토콜의 기반이 되었다.


  • 바이너리 프로토콜

텍스트가 아닌 바이너리 프레임으로 구성

파싱이 더 빠르고, 오류 발생 가능성이 낮음

  • 멀티플렉싱

하나의 TCP Connection 내에서 다수의 스트림을 생성

하나의 요청이 지연되면 나머지 응답이 늦어지는 기존 파이프라이닝과는 달리 각각의 요청/응답을 독립적으로 처리

→ 다수의 요청/응답을 동시에 처리 가능

  • 헤더 압축

반복적으로 사용되는 헤더를 헤더 테이블내의 인덱스로 표기

→ 헤더 크기를 80% 정도 줄임

  • 우선순위 설정 

스트림별로 우선 순위를 지정

→ 중요한 리소스의 처리 지연을 방지

  • 서버 푸쉬

클라이언트가 요청하지 않아도 필요가 예상되는 리소스를 서버가 미리 전송




참고 

https://ko.wikipedia.org/wiki/HTTP

https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

HTTP 2.0: The New Web Standard and Issue - KRnet (PDF)


'개발 관련 > 웹 개발' 카테고리의 다른 글

웹소켓(WebSocket)을 사용하는 이유  (0) 2017.02.21
GET vs POST  (0) 2017.02.21
REST, RESTful, RESTful API  (0) 2017.02.21
URN, URL, URI  (0) 2017.02.20
HTTP 상태 코드  (0) 2017.02.20
댓글 로드 중…

최근에 게시된 글