第3篇:HTTP发展史

2017-12-29  本文已影响3人  大厂offer

本系列翻译自:https://developer.mozilla.org/en-US/docs/Web/HTTP

注:翻译水平有限,如果有不理解或者纰漏之处,还请参考火狐原文 :https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

超文本传输协议是基于World Wide Web的一种协议,由Tim Berners-Lee和他的团队开发于1989-1991,HTTP经历了许多改变,但保持了简洁性和灵活性;HTTP已经从一个早期的协议演变成了互联网的现代“迷宫”,现在能以高分辨率或3D方式传送图像、视频。

World Wide Web的发明

在1989年,当Tim Berners-Lee还在CERN工作的时候,他写了一个基于因特网建立超文本系统的协议,最初被称作Mesh,在1990年实施过程中被改名为World Wide Web,基于TCP /IP协议而建立,它由四个模块组成:

这个四个基本模块是在1990年末完成的,并且第一个服务器运行在CERN的外围,Tim Berners-Lee's在1991年8月6日发出的alt.hypertext被视为World Wide Web项目的官方开始。HTTP协议的早期条款十分简陋,后来被称为HTTP/0.9,有时也被称为“一行”协议,为什么称作一行,请看下文。

HTTP/0.9 – The one-line protocol

早期的HTTP协议甚至没有版本,0.9版本是后来追加的,为了区别后面的版本;HTTP/0.9极其简单,请求协议只有一行组成,只能使用GET请求,然后后面跟着的是资源路径,连接到服务器的URL、协议、服务器和端口都不需要。

GET /mypage.html

响应也是十分简单的:

<HTML>
A very simple HTML page
</HTML>

不像后来的版本,这里没有HTTP请求头,这意味着只有HTML 文件可以被传递,没有响应码或错误码,如果突发意外,一个专门的HTML文件就被返回,上面有错误的细节。

HTTP/1.0 – Building extensibility

HTTP/0.9 非常受限,浏览器和服务器以非常快的速度对它进行拓展,使其更加通用:

一个典型的请求如下:

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>

紧跟着第二个获取图片的请求发出:

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期间,服务器和浏览器添加了新特性,看似得到了进展,但是随之而来的是许多的问题,在1996年11月,为了解决这些大问题,一个文件诞生了,即RFC 1945,这是HTTP/1.0的定义,值得一提的是,从狭义上来看,它不是官方标准。

HTTP/1.1 – The standardized protocol

为了平衡HTTP/1.0的使用混乱,自从1995年,在HTTP/1.0文件发行之前,HTTP/1.0的标准化工作已在进行中,第一个标准化的HTTP/1.1,在1997年发布了,就比HTTP/1.0晚了几个月,HTTP/1.1澄清了许多歧义并且引入了更多的进步概念:

基于一个链接的请求流程如下:

GET /en-US/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/en-US/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)

GET /static/img/header-background.png HTTP/1.1
Host: developer.cdn.mozilla.net
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: /
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header

200 OK
Age: 9578461
Cache-Control: public, max-age=315360000
Connection: keep-alive
Content-Length: 3077
Content-Type: image/png
Date: Thu, 31 Mar 2016 13:34:46 GMT
Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT
Server: Apache

(image content of 3077 bytes)

HTTP/1.1 于1997年1月发表于RFC 2068文件。

More than 15 years of extensions

由于其拓展能力,创建新的请求头或者方法非常容易,尽管HTTP/1.1协议已经经过两次精炼的提升修改,RFC 2616RFC 7230,其中RFC 7235文件发表在2014年6月,即HTTP/2版本发布前,这个协议已经稳定的运行超过15年了。

Using HTTP for secure transmissions

HTTP 最大的一次改变发生于1994年,不同于TCP/IP技术栈,网景委员会在HTTP上加了一层SSL协议,SSL 1.0从来没有公布过,仅供其内部使用,但是SSL 2.0和其继任者 SSL 3.0以及SSL 3.1允许电子商务网站通过加密等技术为客户端于服务端交换消息保证安全。SSL继而进入正轨并且最终发展成为TLS,1.0, 1.1, 和 1.2 版都不再那么脆弱。TLS 1.3 还在开发中。
与此同时,一个需要加密的传输层协议被提出,一些学术网络相对可靠,但有些人试图窃取人民的隐私信息,对网络安全性有极大的威胁。随着建立在HTTP协议的应用越来越强大,对个人的私人信息的访问也逐渐增多,比如访问电子邮箱,书籍,地理位置等,因此对于TLS的需求也就无处不在。

Using HTTP for complex applications

Tim Berners-Lee的原始版本并不是只读的,他设想一种人人可以添加和移动文档的网站,一种分布式文件系统。大约在1996年,HTTP已经扩展出了授权的功能,一个叫WebDAV的标准被提出。类似CardDAV ,CalDAV 的标准也相应的提出,但是它们都有一个缺点:都需要额外的服务端来实现,这是相当复杂的;同时还需要保密。
到了2010年,一种关于HTTP的新模式被提出: representational state transfer 或者称为REST,即请求的行为被定义如API中,不再使用HTTP methods表示,但是只允许特定的URI访问且是基于HTTP/1.1。这允许任何Web应用程序提供一个API,允许在不更新浏览器或服务器的情况下检索和修改其数据:所有需要的内容都通过标准HTTP / 1.1嵌入在Web站点提供的文件中。REST模型的缺点在于每个网站都定义了自己的非标准的RESTful API并且可以控制它;在2010年代,REST风格的API变得非常普遍。
自从2005年,一系列的API实现了:

Relaxing the security-model of the Web

HTTP是独立于web的安全模型外的,参考同源政策(same-origin policy);事实上,现行的web安全模型在HTTP诞生之初就已经开始发展。事实证明,在某些限制条件下,取消这一政策的某些限制性条款,能够更有发挥的空间,这是很有用的。服务器使用一组新的HTTP header头将这些限制解除。这些都在跨域资源共享定义(CORS)或内容安全政策(CSP)有定义。
除了这些拓展,还有其他的header被定义,如DNTX-Frame-OptionsUpgrade-Insecure-Requests等。

HTTP/2 – A protocol for greater performance

随着时间的推移,web网页变得越来越复杂,甚至成为了一个一个应用。大量的媒体文件,脚本文件需要传输;HTTP/1.1 协议下的连接请求需要按顺序发出,理论上同时建立5-8个连接存在在非常大的开销;比如HTTP 管道(pipelining )在web的发展中就是一个沉重的负担。
在2010年,谷歌论证了一种交换数据的可行性方案,该方案当时还在试验中,即SPDY;这立刻聚集了一大批开发者;为了解决大数据传输的问题,SPDY被纳入HTTP/2协议中。

The HTTP/2 和 HTTP/1.1 主要的区别如下:

Post-HTTP/2 evolution

HTTP的发展不会在HTTP/2停下脚步,其可扩展性仍然被用于添加新特性。值得注意的是,我们可以引用HTTP协议在2016中出现的新扩展:

HTTP的发展证明了它的可扩展性和简单性,解放了许多应用程序的创建,并促使协议的采用。今天使用HTTP的环境与上世纪90年代早期所看到的环境大不相同。HTTP设计被证明是一个杰作,它允许Web在超过25年的时间里,只需要通过修复一些缺陷,就保持了HTTP如此高的灵活性和可扩展性,HTTP/2揭示了该协议的光明前景。

上一篇 下一篇

猜你喜欢

热点阅读