在直接列出执行的步骤之前先来普及几个知识,相信了解完这些知识之后会对前后端的交互有更深入的理解。
1、TCP连接
TCP:Transmission Control Protocol, 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
说的这么专业,有啥用呢?
先来举个栗子吧
还记得小时候我们做的纸杯电话么?两个纸杯用一条绳子连到一起,两个各拿一个纸杯把线拉直,一个对着纸杯讲,一个用耳朵对着纸杯听。
这其实就是一种最简单的连接通信,两人通过一根线连接起来,声音从这边的纸杯发出通过线传输到另一个纸杯接收,扩展到现在家家户户都有的固定电话也是如此,它的通信也是建立在双方可接受并且信任的基础上进行,如:
回到我们的tcp协议,其实它和上面所说的电话协议差不多,只不过电话的协议是服务于电话通信,而tcp是服务于网络通讯的一种协议,类似的,通讯双方建立一次tcp连接,也需要经过三个步骤(握手)。
上面的字母意思如下:
SYN:synchronous 建立联机
ACK:acknowledgement 确认
SYN_SENT:请求连接
SYN_RECV:服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。
值得注意的是:tcp在握手过程中并不携带数据,(就像你打电话给酒店订房时,在确认对方是酒店客服人员之前,你也不会马上把身份证号码报给他吧?),而是在三次握手完成之后,才会进行数据传送。
至于它的应用场景,其实是根据它本身的特点而定的,比如对网络通讯质量有要求,需要保证数据准确性时,就需要用到TCP协议了,如HTTP、ftp等文件传输协议、或一些邮件传输协议(SMTP、pop等)
2、UDP连接
UDP :User Datagram Protocol 用户数据报协议
相比于TCP的面向连接需要反复确认的繁琐步骤,UDP是一中性格特立独行并且主观性超强的非面向连接的协议,使用udp协议经常通信并不需要建立连接,它只是负责把数据尽可能快的发送出去,简单粗暴,并且不可靠,而在接收端,UDP把每个消息断放入队列中,接收端程序从队列中读取数据。
有人会说,UDP协议这么不可靠,为啥还会造出来呢?
话说回来,天底下没有无用之人,只有你不懂用的人而已,虽然UDP不可靠,但是它的传输速度快,效率高,在一些对数据准确性要求不高的场景,UDP就变得很有用了,比如qq语音、qq视频。
3、嵌套字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等各种聊天软件)等应用上应用广泛。
4、HTTP协议
HTTP协议:Hypertext Transfer Protocol 也叫超文本传送协议 ,它是一种基于TCP/IP协议栈、在表示层和应用层上的协议(TCP在传输层的协议),通俗一点说就是:
而在现在应用非常广泛的HTTP连接则是建立在HTTP协议上的、处于应用层中的一种具体应用。
上面说到socket连接一旦建立就保持连接状态,而HTTP连接则不一样,它基于tcp协议的短连接,也就是客户端发起请求,服务器响应请求之后,连接就会自动断开,不会一直保持。
5、URL
前面讲了tcp、udp、http…等等都是为了讲一个具体问题而做的知识点铺垫,那就是:我们开发的web应用中请求的发起和响应,是一个怎样的底层原理。
我们都知道,web应用绝大部分都是通过HTTP来进行请求的,而URL则是HTTP用来做连接建立和传输数据的一种具体实现,因此在此要简单讲一下URL。
URL:Uniform Resource Locator 统一资源定位符。说白了就是网络上用来标识具体资源的一个地址,包含了用户查找该资源的信息,HTTP使用它来传输数据和建立连接
一个URL有以下组成部分:
比如:https://www.baidu.com/index.html
其中
6、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回车时,它经历了以下步骤:
7、HTTP请求发起和响应
在一个web程序开发中,一般都有前端和后端之分,前端负责向后端请求数据和展示页面,后端负责接收请求和做出响应发回给前端,他们之间的协作的桥梁是什么呢?
是API
API是什么?不就是一个URL吗?
URL又是啥呢?上面说到就是HTTP连接的一种具体的载体
因此,
无论对于前端或者是后端,理解HTTP,无论是对自身对编程的理解,还是和同事协作,都是好处大大的,
下面,根据上面各个知识点的理解,我们来整理一下并解决一下上面提到的第一个问题:
从用户输入URL,到浏览器呈现给用户页面,经过了什么过程
文章转自:https://mp.weixin.qq.com/s/G8cx8G-VhUtC6XA1PIysCg,感谢作者
原文:https://www.cnblogs.com/jokmangood/p/11705959.html