万维网的四个部分
一个文件格式去代表超文本文档——HTML
一个简单的协议去交换这些文档——HTTP
一个客户端去展示和编辑这些文档——浏览器
一个服务器用于访问这些文档
HTTP0.9——一行协议 HTTP0.9极其的简单,请求只包含单行,并且只可能使用一个GET方法,后面跟随路径和资源名,一旦连接到服务器之后,协议,服务器,端口号是不需要的,因此请求中没有URL
响应也是极其简单的,只包含响应内容
1 2 3 <html> A very simple HTML page </html>
由于HTTP0.9没有HTTP头部,所以只能传输HTML文件.由于没有状态码和错误码,如果出现了任何问题,那么一个特定的HTML文件将生成,来展示问题的描述信息.
HTTP1.0——构建扩展性
每个请求添加了版本信息,如GET 资源 HTTP/1.0
响应的开头包含了响应码行,这允许浏览器去识别请求成功或者失败,并由此适配出合适的行为,比如在成功的时候更新资源,在失败的时候使用本地缓存.
HTTP头部的概念引入到请求和响应.元数据可以被传输,因此协议变得极其灵活和可扩展.
由于有了Content-Type头部,除了HTML之外的其他类型资源也可以传输.
HTTP的请求和响应如下:
1 2 3 4 5 6 7 8 9 10 11 GET /mypage.html HTTP/1.0User-Agent : NCSA_Mosaic/2.0 (Windows 3.1) 200 OKDate : Tue, 15 Nov 1994 08:12:31 GMTServer : CERN/3.0 libwww/2.17Content-Type : text/html <HTML> A page with an image <IMG SRC="/myimage.gif"> </HTML>
随后发生的请求和响应:
1 2 3 4 5 6 7 8 GET /myimage.gif HTTP/1.0User-Agent : NCSA_Mosaic/2.0 (Windows 3.1) 200 OKDate : Tue, 15 Nov 1994 08:12:32 GMTServer : CERN/3.0 libwww/2.17Content-Type : text/gif (image content)
HTTP1.1——标准协议 HTTP1.1提供了许多改进.
一个连接可以被复用,用于节省时间.在请求资源时,不需要再建立多个连接
管道化.允许在第一个请求还没有完成传输时发送第二个请求,这个降低了通讯的延迟
支持大块的响应
引入了额外的缓存控制机制
客户端和服务器支持内容协商,包括语言,编码,类型的协商.
新增了Host头部,使得一个服务器(一个IP)可以拥有不同的域名.
一个典型的HTTP1.1请求示例,所有的请求都通过一个TCP连接:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 GET /en-US/docs/Glossary/Simple_header HTTP/1.1Host : developer.mozilla.orgUser-Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language : en-US,en;q=0.5Accept-Encoding : gzip, deflate, brReferer : https://developer.mozilla.org/en-US/docs/Glossary/Simple_header 200 OKConnection : Keep-AliveContent-Encoding : gzipContent-Type : text/html; charset=utf-8Date : Wed, 20 Jul 2016 10:55:30 GMTEtag : "547fa7e369ef56031dd3bff2ace9fc0832eb251a"Keep-Alive : timeout=5, max=1000Last-Modified : Tue, 19 Jul 2016 00:59:33 GMTServer : ApacheTransfer-Encoding : chunkedVary : Cookie, Accept-Encoding (content)GET /static/img/header-background.png HTTP/1.1Host : developer.mozilla.orgUser-Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0Accept : */*Accept-Language : en-US,en;q=0.5Accept-Encoding : gzip, deflate, brReferer : https://developer.mozilla.org/en-US/docs/Glossary/Simple_header 200 OKAge : 9578461Cache-Control : public, max-age=315360000Connection : keep-aliveContent-Length : 3077Content-Type : image/pngDate : Thu, 31 Mar 2016 13:34:46 GMTLast-Modified : Wed, 21 Oct 2015 18:27:50 GMTServer : Apache (image content of 3077 bytes)
HTTPS 1994年网景公司在TCP/IP栈上的顶部创造了一个额外的加密层——SSL.SSL1.0没有公开,而SSL2.0和它的后继者SSL3.0用于电子商务网站的建立.HTTPS加密信息,保证它们在客户和服务器之间的真实性,SSL最终标准化并演变成了TLS.随后,由于互联网的普及性,HTTPS不再只用于电子商务场景中,比如用于私人信息的保护,比如电话簿,用户位置,邮箱等.
HTTP2.0——用于提升性能 HTTP2.0和HTTP1.1的不同之处:
HTTP2.0是一个二进制协议而不是文本协议.它不可以被手动读取和创造.它允许优化提升技术的实现
HTTP2.0是一个多路复用协议.并行请求可以在同一个连接上被创建.
HTTP2.0进行了头部压缩.由于一些请求经常发送一些相同的头部信息,这个特性减少了传输重复数据的开销
HTTP2.0允许服务器推送数据到客户端客户端缓存.
HTTP3.0——在QUIC上的HTTP 下一个主要的HTTP版本,HTTP3与早期的HTTP有相同的语义,但是使用QUIC代替TCP来做运输层传输.QUIC使得HTTP连接拥有更低的延迟,和HTTP2一样,它是一个多路复用协议,但是HTTP2运行在单个TCP连接上,因此包丢失检测和重传处理可能阻塞连接上的所有流.而QUIC运行多个流在UDP之上,并且为每个流实现了单独的包丢失检测和重传,一旦错误发生,只有发生错误的流的数据包会发生阻塞.
参考资料 https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP