首先强烈推荐大家想学HTTP协议的同学们,看《图解HTTP》这本书,真的是很生动很容易理解。接下来废话就不多说了,读完小小地总结一下。
你知道当我们在网页浏览器(Web browser)的地址栏中输入 URL 时,Web 页面是如何呈现的吗?在看了<图解HTTP>这本书后,觉得很生动形象,在此分享给大家。
Web 页面当然不能凭空显示出来。根据 Web 浏览器地址栏中指定的 URL,Web 浏览器从 Web 服务器端获取文件资源(resource)等信 息,从而显示出 Web 页面。 像这种通过发送请求获取服务器资源的 Web 浏览器等,都可称为客 户端(client)。
Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协 议 1)的协议作为规范,完成从客户端到服务器端等一系列运作流 程。而协议是指规则的约定。可以说,Web 是建立在 HTTP 协议上通 信的。
下图是日本的第一个web网页:(个人感觉很炫酷)
为了理解 HTTP,我们有必要事先了解一下 TCP/IP 协议族。 因为通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作 的。而 HTTP 属于它内部的一个子集。 接下来,我们仅介绍理解 HTTP 所需掌握的 TCP/IP 协议族的概要。 若想进一步学习有关 TCP/IP 的知识,请参考其他讲解 TCP/IP 的专业 书籍。
如果某人发出一个想看某个 Web 页面的 HTTP 请求,那么具体流程是怎么样的?
利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通 信。发送端从应用层往下走,接收端则往应用层往上走。
我们用 HTTP 举例来说明,首先作为发送端的客户端在应用层 (HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求(应用层)。 接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数 据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端 口号后转发给网络层。
在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链 路层。这样一来,发往网络的通信请求就准备齐全了。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用 层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该 层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层 时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装(encapsulate)。
现在我们知道web是依赖于HTTP协议,而HTTP协议在传输层是依靠TCP协议来传输的,TCP提供可靠的字节流服务。 所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大 块数据分割成以报文段(segment)为单位的数据包进行管理。而可 靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之, TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够 确认数据最终是否送达到对方。确保数据能到达目标,这也是TCP和UDP的区别。那么TCP是如何保障可靠传输呢?在下一篇博客我们再来讨论。