在直接列出执行的步骤以前先来普及几个知识,相信了解完这些知识以后会对先后端的交互有更深刻的理解。html
一、TCP链接前端
TCP:Transmission Control Protocol, 传输控制协议,是一种面向链接的、可靠的、基于字节流的传输层通讯协议。
说的这么专业,有啥用呢?
先来举个栗子吧
还记得小时候咱们作的纸杯电话么?两个纸杯用一条绳子连到一块儿,两个各拿一个纸杯把线拉直,一个对着纸杯讲,一个用耳朵对着纸杯听。web
这其实就是一种最简单的链接通讯,两人经过一根线链接起来,声音从这边的纸杯发出经过线传输到另外一个纸杯接收,扩展到如今家家户户都有的固定电话也是如此,它的通讯也是创建在双方可接受而且信任的基础上进行,如:编程
回到咱们的tcp协议,其实它和上面所说的电话协议差很少,只不过电话的协议是服务于电话通讯,而tcp是服务于网络通信的一种协议,相似的,通信双方创建一次tcp链接,也须要通过三个步骤(握手)。后端
上面的字母意思以下:浏览器
SYN:synchronous 创建联机
ACK:acknowledgement 确认
SYN_SENT:请求链接
SYN_RECV:服务端被动打开后,接收到了客户端的SYN而且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。缓存
值得注意的是:tcp在握手过程当中并不携带数据,(就像你打电话给酒店订房时,在确认对方是酒店客服人员以前,你也不会立刻把身份证号码报给他吧?),而是在三次握手完成以后,才会进行数据传送。安全
至于它的应用场景,实际上是根据它自己的特色而定的,好比对网络通信质量有要求,须要保证数据准确性时,就须要用到TCP协议了,如HTTP、ftp等文件传输协议、或一些邮件传输协议(SMTP、pop等)服务器
二、UDP链接cookie
UDP :User Datagram Protocol 用户数据报协议
相比于TCP的面向链接须要反复确认的繁琐步骤,UDP是一中性格特立独行而且主观性超强的非面向链接的协议,使用udp协议常常通讯并不须要创建链接,它只是负责把数据尽量快的发送出去,简单粗暴,而且不可靠,而在接收端,UDP把每一个消息断放入队列中,接收端程序从队列中读取数据。
有人会说,UDP协议这么不可靠,为啥还会造出来呢?
话说回来,天底下没有无用之人,只有你不懂用的人而已,虽然UDP不可靠,可是它的传输速度快,效率高,在一些对数据准确性要求不高的场景,UDP就变得颇有用了,好比qq语音、qq视频。
三、嵌套字Socket
为何要说嵌套字?
那是由于就像前面说的,TCP或UDP都是一种协议,也就是计算机网络通讯中在传输层的一种协议,简单地说,就是一种约定,就像合做双方的合同同样,而后合同是死的,只有履行合同才是实质性的行动,所以不管是TCP仍是UDP要产生做用,都须要有实际的行为去执行才能体现协议的做用,
那么,有什么办法让这些协议做用呢?
这就要说到socket了。
socket:也叫嵌套字 ,是一组实现TCP/UDP通讯的接口API,也就是说不管TCP仍是UDP,经过对scoket的编程,均可以实现TCP/UCP通讯,做为一个通讯链的句柄,它包含网络通讯必备的5种信息:
可见,socket包含了通讯本方和对方的ip和端口以及链接使用的协议(TCP/UDP)。通讯双方中的一方(暂称:客户端)经过scoket(嵌套字)对另外一方(暂称:服务端)发起链接请求,服务端在网络上监听请求,当收到客户端发来的请求以后,根据socket里携带的信息,定位到客户端,就相应请求,把socket描述发给客户端,双方确认以后链接就创建了。
所以套接字之间的链接过程有三个步骤:
一般状况下socket链接就是TCP链接,所以socket链接一旦创建,通信双方开始互发数据进行通讯,直到其中一方或双方断开链接为止。
socket在即时通信(qq等各类聊天软件)等应用上应用普遍。
四、HTTP协议
HTTP协议:Hypertext Transfer Protocol 也叫超文本传送协议 ,它是一种基于TCP/IP协议栈、在表示层和应用层上的协议(TCP在传输层的协议),通俗一点说就是:
而在如今应用很是普遍的HTTP链接则是创建在HTTP协议上的、处于应用层中的一种具体应用。
上面说到socket链接一旦创建就保持链接状态,而HTTP链接则不同,它基于tcp协议的短链接,也就是客户端发起请求,服务器响应请求以后,链接就会自动断开,不会一直保持。
五、URL
前面讲了tcp、udp、http…等等都是为了讲一个具体问题而作的知识点铺垫,那就是:咱们开发的web应用中请求的发起和响应,是一个怎样的底层原理。
咱们都知道,web应用绝大部分都是经过HTTP来进行请求的,而URL则是HTTP用来作链接创建和传输数据的一种具体实现,所以在此要简单讲一下URL。
URL:Uniform Resource Locator 统一资源定位符。说白了就是网络上用来标识具体资源的一个地址,包含了用户查找该资源的信息,HTTP使用它来传输数据和创建链接
一个URL有如下组成部分:
好比:https://www.baidu.com/index.html
其中
六、DNS
DNS:Domain Name Server,域名服务器。
是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。
在平时咱们进行开发时,后端提供的接口地址一般是有IP地址加上端口号(8080什么鬼的)组成的,可是当咱们把网站发布出去时,一般都须要把IP改为用域名。
为何呢?
你想一想哦,好比谷歌的地址是89.12.21.221:9090,百度的地址是132.21.33.221:8766。。。
这么一看你根本没有欲望是记住这些乱七八糟的数字吧?
可是域名就不同了,好比谷歌的google.com,百度的baidu.com 是否是一遍就记住了呢?
因此为了处理这个问题,就须要用域名去映射IP地址,达到易记易用的目的。
所以,当用户在浏览器输入https://www.baidu.com回车时,它经历了如下步骤:
七、HTTP请求发起和响应
在一个web程序开发中,通常都有前端和后端之分,前端负责向后端请求数据和展现页面,后端负责接收请求和作出响应发回给前端,他们之间的协做的桥梁是什么呢?
是API
API是什么?不就是一个URL吗?
URL又是啥呢?上面说到就是HTTP链接的一种具体的载体
所以,
不管对于前端或者是后端,理解HTTP,不管是对自身对编程的理解,仍是和同事协做,都是好处大大的,
下面,根据上面各个知识点的理解,咱们来整理一下并解决一下上面提到的第一个问题:
从用户输入URL,到浏览器呈现给用户页面,通过了什么过程
文章转自:https://mp.weixin.qq.com/s/G8cx8G-VhUtC6XA1PIysCg,感谢做者