HTTP의 발전 과정
mdn web docs_Evolution of HTTP 문서에 대한 번역과 주관적인 해석, 부연설명
What is HTTP?
HTTP(HyperText Transfer Protocol)는 World Wide Web에서 사용하는 프로토콜이다. Tim Berners-Lee와 그의 팀에 의해 1989년에서 1991년 사이에 개발되었다. HTTP는 간결함은 유지하면서 유연함(flexibility)을 추가하기 위해 많은 변화를 겪었다.초창기에는 연구실 환경에서 파일을 주고받기 위해 디자인되었지만 지금은 인터넷을 통해 전 세계 사람들이 텍스트 뿐만 아니라 이미지와 고화질, 심지어는 3D 영상까지도 교환할 수 있다.
Internet vs WEB
인터넷과 웹은 다르다.
- 인터넷 : 전 세계에 걸쳐 연결된 거대한 네트워크
- 웹 : 인터넷 위에서 동작하는 hypertext 문서를 주고받는 서비스
- hypertext : hyperlink를 통해 서로 연결된 문서(문자로 이루어진 파일)
Invention of the World Wide Web
1989년 Tim Berners-Lee는 CERN에서 근무하며 인터넷을 사용하는 hypertext 시스템에 대한 제안서를 작성했다. 처음에는 이 서비스를 Mesh라고 불렀지만 1990년 이 서비스를 개발하면서 World Wide Web으로 이름을 바꾸었다. TCP와 IP 프로토콜 위에서 동작하며 네 개의 building block들로 구성된다.
- HTML : hypertext 문서를 표현하는 양식
- HTTP : hypertext 문서를 교환하는 프로토콜
- Web browser : hypertext 문서를 편집하고 보여주는 클아이언트 (WorldWideWeb)
- server : hypertext 문서에 접근할 수 있게 해주는 프로그램 (httpd)
위의 네 가지 building block들은 1990년 말에 완성되었고 최초의 web server는 1991년 CERN 외부에서 실행되었다.
초기의 HTTP는 굉장히 단순했다. 나중에HTTP/0.9
라는 이름이 붙여졌다.One-line protocol
이라고도 한다.
HTTP/0.9
1990년에 완성된 HTTP의 첫 번째 버전은 version number가 없었다. 나중에 다른 버전과 구별하기 위해 HTTP/0.9라는 이름이 붙여졌다.
HTTP/0.9는 극도로 단순했다. Request는 GET 메소드로만 시작되는 한 줄로 구성되었다. GET
뒤에는 resource의 경로가 따라왔다. 전체 URL이 프로토콜에 포함되어있지 않았기 때문에 일단 server와 연결되면 server 주소, port 번호는 필요하지 않았다.
매 요청마다 connection을 생성하고 통신이 완료되면 connection을 종료한다. (TCP 위에 구현되었기 때문이다.)
GET /mypage.html
Response 또한 극도로 단순했다. 오직 hypertext 파일만을 포함했다.
<html>
A very simple html page
</html>
이후의 버전과 달리 HTTP header가 없었다. 다시 말해 오직 HTML 파일만이 전송될 수 있었다. Status code, error code는 존재하지 않았다. 만약 문제가 발생했다면, 특정 HTML 파일에 문제의 설명이 포함되어 전송되었다.
HTTP/1.0
HTTP/0.9는 기능이 매우 제한적이였지만, 여러 브라우저들과 server들이 HTTP를 다재다능(versatile)하게 만들었다.
HTTP 프로토콜 자체의 기능이 수정된 것이 아니라, 브라우저와 server에 기능이 추가되었다.
server와 브라우저들이 HTTP/1.0
spec을 작성하고 각자 구현한 것이다.
- Request를 보낼 때 버전 정보를 보낼수 있게 되었다. (GET line에
HTTP/1.0
이 추가되었다.) - Response의 첫 번째 줄에 status code line이 추가되었다. 이를 통해 브라우저는 request의 성공 여부를 스스로 판단할 수 있게 되어 적절한 조치를 취할 수 있었다.
- Response와 request에 HTTP header라는 개념이 도입되었다.
Content-Type
header 덕분에 순수 HTML 파일이 아닌 다른 문서들도 전송 가능해졌다.
HTTP/1.0을 따르는 일반적인 request와 response는 다음과 같았다.
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>
아래는 두 번째 connection에서 image 요청과 그에 대한 response이다.
GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(image content)
1991년에서 1995년 사이에 versioning information, status code, HTTP header, Content-Type은 try-and-see 접근법으로 도입되었다. 서버와 브라우저가 해당 기능을 추가하고 효과가 있는지 확인하는 방식이다.
Comments