深入理解HTTP协议(一)--http协议的产生和发展

最近看了《图解HTTP》这本书,对HTTP协议的理解和使用,以及从http协议进化到https协议的起因和发展都有了一定的了解。所以通过这个系列文章来整理下思绪,加深印象。
整个专栏通过3篇文章来总结回顾这本书,我把它分为三个部分的总结。

  • http协议的产生和发展
  • http协议的报文首部和报文主体的分析
  • https协议的产生和发展

这篇文章作为整个专栏的第一篇,就先来回顾下http协议的产生和发展。

http协议的产生

http协议最初诞生于CERN(欧洲核子研究机构)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士,他提出了一种让远隔两地的研究者们共享知识的构想,连成一个可相互参阅的www(world wide web 万维网)。
现在已经诞生了三项www构建技术,分别是把SGML(StandardGeneralized Markup Language,标准通用标记语言)作为页面的文本标记语言的 HTML(HyperText Markup Language,超文本标记语言);作为文档传递协议的 HTTP ;指定文档所在地址的URL(UniformResource Locator,统一资源定位符)。
http/0.9版本诞生于1990年,但那时候没有还没有作为标准被建立。正式公布标准是在1996年的5月,版本命名为http/1.0。并记载于RFC1945,虽说是初期标准,但至今仍被服务器广泛采用。1997年1月公布了http/1.1版本。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议。于2015年5月以RFC 7540正式发表。HTTP/2的标准化工作由Chrome、Opera、Firefox、Internet Explorer 11、Safari、Amazon Silk及Edge等浏览器提供支持。

网络通讯的基础

tcp/ip协议族

计算机与网络设备要相互通信,双方就必须要基于相同的方法。比如如何探测到通信目标,由哪一方先发起通信,通信采用何种语言等都需要事先确定。不同的硬件,操作系统之间的通讯都需要一种规则,这种规则就定为协议。
tcp/ip是互联网相关的各类协议族的总称。其最重要的特点就是分层。按照层次分为:应用层,传输层,网络层,数据链路层。那么为什么要分层呢?其主要目的为了好管理。假如只有一个协议来管理的话,当需要变动的时候,整体都要发生变化。而分层就只需要替换对应层级的协议即可。有点类似于面向接口感觉。分层的图示意:
在这里插入图片描述

与http关系密切的协议:ip,tcp,dns
  • ip协议负责把数据包传输给对方。而要确保传送成功,需要满足至少两个重要条件。ip地址和Mac地址。ip地址指明了节点被分配到的地址,Mac地址是指网卡的专属地址。ip地址和Mac地址进行配对,ip地址可以发生变化,但是Mac地址一般不会变化。这里还有一个关键协议就是ARP协议。它是一种用以解析地址的协议,根据通信方的ip地址可以反查出Mac地址。
  • tcp协议采用三次握手策略保证数据包成功传达。握手过程中使用了tcp的标志(flag)–SYN(synchronize)和ACK(acknowledgement)。发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。
  • dns协议是域名解析协议,工作在应用层。负责域名和ip地址之间的解析服务。
    书中的图生动刻画了这几个协议工作的层级和功能:
    在这里插入图片描述

http协议的特征

  1. 无状态
    使用http协议通信时,每当有新的请求发送时,就会有新的响应产生。协议本身不保留之前通信的信息。这是为了能够更快的处理大量事务,确保协议的可伸缩性。特意设计的。
  2. Cookie的会话管理
    由于http协议本身无状态,但是有时候又需要保持通讯的状态或者通讯的信息,Cookie应运而生。会根据从服务器端返回的响应中有个set-cookie的首部字段来通知客户端保存Cookie。当下次发送请求时,客户端会自动带上Cookie信息供服务器识别。
  3. 持久通信
    早期的网络通信包含的信息量较少,每次通讯时建立新的连接,不需要时断开连接,是能够接受的。随着互联网的发展,信息量越来越大,频繁的建立连接,断开连接是很大的开销,尤其是随着社交网络的发展,动辄成百上千万人同时在线,频繁的断开,建立连接对于网站来说是不可接受的。所以在http/1.1和一部分http/1.0想出了持久连接的方法。特点是只要任意一端没有明确提出要断开链接,则保持tcp链接状态。不但减少了tcp连接的重复建立和断开带来的额外开销,减轻了服务器端的负载压力。另外节省出的那部分时间能够让http请求和响应更快的结束,提高了web页面的显示速度。
  4. 管线化
    能够做到并行发送多个请求,而不需要等待响应。
发布了43 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u013243938/article/details/103541766