在介绍 HTTP 之前,首先我们来思考几个问题
- HTTP 到底是什么?
- HTTP 在整个网络通信中扮演着怎样的角色?
- HTTP 是如何进行通信的呢?
带着这 3 个问题 ,我们来开始今天的内容。(当然,如果大神对这3个问题比较清楚,可以直接跳到末文看总结)。
在理解 HTTP 之前,首先我们得先来看看 TCP/IP 协议族是什么?
简介TCP/IP
定义:
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP、SMTP、TCP、UDP、IP 等协议构成的协议簇, 只是因为在TCP/IP 协议中 TCP 协议和 IP 协议最具代表性,所以被称为TCP/IP协议。
看上面的描述一大堆,不需要死记硬背,我们只需要有一个概念,也就是 TCP/IP 的本质。
本质:
一系列协议所组成的一个网络分层模型。
哦,,搞半天你是个协议族,还分层?分几层 ?为啥子要分层?
具体分层:
OSI 七层模型 | TCP/IP 模型 | 功能 | TCP/IP 具体包含的协议 |
---|---|---|---|
应用层 | 应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SMMP,FTP,SMTP,DNS,Telnet |
表示层 | 应用层 | 数据格式化,代码转换,数据加密 | 没有协议 |
会话层 | 应用层 | 接触或建立与别的接点的联系 | 没有协议 |
传输层 | 传输层 | 提供端到端的接口 | TCP,UDP |
网络层 | 网络层 | 为数据包选择路由 | IP,ICMP,RIP,OSPF,BCP,ICMP |
数据链路层 | 链路层 | 传输由地址的帧以及错误功能检测 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 链路层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
简单的看这个图似乎好像有些复杂,这里我们只需要了解三点:
- TCP/IP 的分层是从开放系统互联 OSI (Open System Interconnection)模型演变而来的。
- TCP/IP 与 OSI 在分层模块上有些区别,OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。
- 在 TCP/IP 协议中,它们被简化为了四层.分别是应用层、传输层、网络层、链路层
知道以上信息再结合我们实际的开发,其实上面这个表可再以优化一下,把我们常用的协议取出,如下:
TCP/IP 模型 | TCP/IP 具体包含的协议 |
---|---|
应用层 | HTTP,FTP,DNS |
传输层 | TCP,UDP |
网络层 | IP |
数据链路层 | 路由,WIFI |
这样看就简洁多了吧,OK,回到之前我们的疑问,我们现在大致了解了 TCP/IP 协议族确实需要分层,并且是分四层,那么,重点来了?到底为什么需要分层呢?
核心原因,主要是网络的不可靠性,或者说是网络的不稳定造成的。 假设我们的网络是稳定可靠的,那么应用层软件其实可以直接和链路层设备进行通信,哪还需要中间这么复杂的过程。其中 TCP 协议的三次握手和他的窗口(吞吐量)也主要是来处理网络的不稳定和不可靠性的,后面的文章中会讲到。另外分层的次要原因还考虑到安全、节约宽带、方便管理等。
弄明白上面几个问题后,我们对 HTTP 在网络通信中扮演的角色已经有了一个初步的了解。读到这里我们可以对本文开头的第二个问题进行回答了,哦!!!,原来 HTTP 在整个网络通信(TCP/IP 协议族)中属于应用层的一个协议,用于和传输层进行通信。
那么到底什么是 HTTP?
我们平时感受到 HTTP 比较直观的是两个场景
- 在我们游览器地址栏啪输入“www.jackwaiting.com”,啪,一个界面出来了。
- 在我们编写软件程序的时候,拿到后台的一个接口。例如:“https://www.jackwaiting.com?xxx=“xxx” ” 然后对这个 HTTP 请求做一系列的描述,什么请求方法咯,GET/POST , 请求行,请求 Body,返回码,XXXX 一大堆,对吧?