월드 와이드 웹(WWW)에서 정보를 주고받기 위해 사용되는 프로토콜 중 하나로,
클라이언트와 서버 간의 데이터 통신을 위한 규칙과 프로토콜을 정의합니다.
HTTP는 본래의 단순함의 대부분을 지키면서 확장성 위에서 많은 수정을 거쳐왔으며
이러한 변화 과정을 알아보고자 합니다.
HTTP 초기 버전으로서, 초기에는 버전 번호가 없었지만 이후에 다른 버전과 구별하기 위해 0.9로 불리게 됐습니다.
구조는 극히 단순합니다.
단일 라인으로 구성되며 프로토콜, 서버, 포트는 서버가 연결되고 나면 불필요하기에 리소스에 대한 경로 및 가능한 메서드는 'GET'이 유일했습니다.
GET /mypage.html
응답 또한 파일 내용 자체만으로 구성되어 극도로 단순합니다.
<HTML>
A very simple HTML page
</HTML>
해당 버전은 HTML 파일만 전송될 수 있었기에 헤더가 존재하지 않았으며
문제가 발생한 경우, 사람이 직접 처리할 수 있도록 해당 파일 내부에 문제에 대한 설명과 함께 리턴이 되었기에
상태 혹은 오류 코드도 존재하지 않았습니다.
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버전은 1.0이 나온 지 몇 달 되지 않은 1997년 1월에 처음 공개되었습니다. (RFC 2068)
이전 버전에 비해 모호함을 명확하게 하고 많은 개선 사항들을 도입했습니다.
GET /ko/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/ko/docs/Glossary/Simple_header
200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
(content)
몇 년에 걸쳐, 웹 페이지는 매우 복잡해지면서, 하나의 요청에 대한 스크립트의 양과 크기는 점점 더 많이 증가하고 있습니다.
HTTP/1.1 커넥션은 순차적으로 전송되는 요청을 필요로 합니다.
몇몇 병렬 커넥션이 이론적으로 사용 가능한 경우에도 여전히 많은 양의 오버헤드와 복잡도가 남아 있습니다.
이러한 상황에서 HTTP/2 프로토콜은 HTTP/1.1 버전과 다른 몇가지 근본적인 차이점은 아래와 같습니다.
2015년 5월에 공식적으로 표준화된 HTTP/2는 정보 전송 시 오버헤드 감소로 많은 웹사이트들은 해당 프로토콜을 급속도로 받아들이기 시작했습니다.
이러한 변화는 어느 정도의 제한된 액터 세트만이 필요했고 이외에는 최신의 브라우저, 서버만 있으면 전환이 손쉬웠기에 가능했습니다.
HTTP의 다음 메이저 버전인 HTTP/3에서는 전송 계층 부분에
'TCP/TLS' 대신 'QUIC(Quick UDP Internet Connection)'가 사용됩니다.
Firefox에서의 구현 상태는 Firefox bug 1158011을 참조해주세요.
유익한 자료 감사합니다.