1989 年,当时在 CERN 工作的 Tim Berners-Lee 博士写了一份关于建立一个通过网络传输超文本系统的报告。这个系统起初被命名为 Mesh。
Tim Berners-Lee 对于 Web 的最初设想不是一个只读媒体,是可以远程添加或移动文档,是一种分布式文件系统。
1990 年项目实施期间被更名为万维网(World Wide Web)。基于现有的TCP 和 IP 协议基础建立。由四部分组件
1991 年 8 月 16 日,Tim Berners-Lee 在公开的超文本新闻组上发表的文章被视为是万维网公共项目的开始。此时的 HTTP 被称为 HTTP/0.9,又被称为 单行(one-line)协议。
1994 年底, 网景公司在TCP/IP 协议基础上创建了一个额外的加密传输层:SSL。
最初版本的 HTTP 协议并没有版本号,后来它的版本号被定位在 0.9 以区分后来的版本。HTTP/0.9 的响应内容并不包含 HTTP 头,无法传输其他类型的文件。也没有状态码或错误代码。
出现问题会响应一个包含问题描述的 HTML 文件
GET /mypage.html
<html>
这是一个非常简单的 HTML 页面
</html>
在 1991-1995 年,这些新扩展并没有被引入到标准中,只作为一种尝试。。
服务器和浏览器添加这些新扩展功能,出现了大量的互操作问题。
此时 HTTP/1.0 具备了传输其他类型文档的能力。
请求获取图片
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
(这里是图片内容)
1996 年 11 月,HTTP 被扩展到允许创作,并且创建了一个名为 WebDAV 的标准。 并且解决之前已知问题,发表了 RFC 1945。用以描述如何操作实践这些新扩展功能。但它不是官方标准。
1997 年初,HTTP1.1 标准发布。HTTP/1.1 在 1997 年 1 月以 RFC 2068 文件发布。
HTTP/1.1 消除了大量歧义内容并引入了多项改进:
一个典型的请求流程,所有请求都通过一个连接实现,看起来就像这样:
GET /zh-CN/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/zh-CN/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.mozilla.org
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/zh-CN/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)
1999 年 6 月, HTTP/1.1 协议修订,发布 RFC 2616
2000 年,一种新的使用 HTTP 的模式被设计出来:具象状态传输(representational state transfer) (或者说 REST)。
REST(Representational State Transfer,表现层状态转换)是一组软件架构设计规范,可实现高效、可靠和可拓展的分布式系统。
REST 的基本概念是资源(resource),例如文件能通过明确和标准的操作与格式,转换其状态与超文本的关系。通常在 API’s 或服务能直接修改文件的类型,而非触发其他行为时,它们就称自己为 RESTful。
由于万维网 Web 背后的 HTTP 协议也能传输文件和超文本链接,同时又充当了标准,简易的 HTTP API 虽然有时不一定遵守所有的 RESTful 规范,但它们还是会被称为 RESTful API、RESTful 服务,或者直接叫 REST 服务。初学者可以先假设 REST API 代表一个能通过标准 web 库和工具调用的 HTTP 服务。
遵循 REST 规范的 API 只能通过使用基本的 HTTP / 1.1 方法访问特定的 URI。允许任何 Web 应用程序通过提供 API 以允许查看和修改其数据,而无需更新浏览器或服务器。所有需要的内容都被嵌入到由网站通过标准 HTTP/1.1 提供的文件中。
RESTful API 在 2010 年变得非常流行
自 2005 年以来,可用于 Web 页面的 API 大大增加,其中几个 API 为特定目的扩展了 HTTP 协议,大部分是新的特定 HTTP 头:
2014 年 6 月,HTTP/1.1 协议再次修订,发布 RFC 7230-RFC 7235
2016 年,HTTP 的新扩展:
HTTP/1.1 链接需要请求以正确的顺序发送,理论上可以用一些并行的链接(尤其是 5 到 8 个),带来的成本和复杂性堪忧。比如,HTTP 管线化(pipelining)就成为了 Web 开发的负担。
在 2010 年,谷歌通过实践了一个实验性的 SPDY 协议。明确了响应数量的增加和解决复杂的数据传输,SPDY 成为了 HTTP/2 协议的基础。
在2015 年 5 月正式标准化
在 2022 年 1 月达到峰值,占所有网站的 46.9%
HTTP/3在传输层部分使用 QUIC (en-US)。QUIC 旨在为 HTTP 连接设计更低的延迟。QUIC 通过 UDP 运行多个流,并为每个流独立实现数据包丢失检测和重传。如果发生错误,只有该数据包中包含数据的流才会被阻止。