前言:本文以学习为目的,简单阐述了HTTP协议及其相关内容,如描述有误烦请指出。
浏览器获取数据的大致过程
- 当我们在浏览器中输入URL并敲下回车之后,浏览器作为客户端,向网络另一边的服务器发送HTTP请求。
- 服务器接收到请求,进行相应的处理之后,返回响应。
- 浏览器接收到响应,将响应中的数据处理后显示在页面中。
从过程中一步步分析
一、地址解析
URI、URL、URN
浏览器需要告诉服务器,自己想要的资源是什么,换句话说,就是要让服务器能过定位到浏览器想要的资源。
URI(统一资源标识符)用来定位资源的。
URI有两种形式:1、通过资源的位置来定位,即URL(统一资源定位符);2、通过资源的唯一名称来定位,即URN(统一资源名)。
URN仍处于试验阶段,还未大范围使用,所以目前使用的基本上都是URL。
解析URL
1、浏览器提取出URL中的域名(如www.cnblogs.com),查找自身DNS缓存中是否存在该域名。
2、如果DNS缓存中不存在该域名,则进行DNS解析,将域名解析成对应的IP地址。
3、从URL中提取出端口号。
4、根据IP地址和端口号就可以确定目标服务器了。
二、浏览器发送HTTP请求
HTTP(超文本传输协议)
Web浏览器、服务器及其他相关Web应用程序都通过HTTP进行通信。
HTTP使用的是可靠的数据传输协议。
报文
资源是以报文的形式传输的。HTTP报文是纯文本。
请求和响应时都会发送报文。
报文的组成部分:
1、起始行:HTTP版本号、URL(请求)、请求方法(请求)、状态码(响应)、状态描述短语(响应)。
2、首部:键值对列表,描述的请求/响应的一些信息。
3、主题:传输的内容,如图片、视频、HTML文档等。
三、服务器响应
服务器接收到请求,进行相应的处理,如资源存储、删除、修改等。
以报文的形式将响应信息返回给浏览器。
四、数据如何传输
1、建立TCP连接(三次握手),进行端到端的传输(“端”指源主机和目的主机,如客户端到服务器)。
TCP连接提供了可靠的数据管道,报文在传递过程中不会丢失、受损或失序(除非计算机或网络出现故障)。
2、TCP将数据流划分成适当长度的报文段,发送给IP层。
3、IP层将报文段进一步封装成数据包,进行点到点的传输(“点”指主机或路由器)。
4、通信完成关闭连接(四次挥手)。
五、三次握手
1、客户端请求建立连接时,会向服务器发送一个小的TCP报文段,其中设置了SYN标记,表示请求建立连接。
2、服务器接收到请求,就会对一些连接参数进行计算,并向客户端返回一个TCP报文段,其中设置了SYN和ACK标记,表示建立连接并正确响应。
3、最后,客户端向服务器回送一个TCP报文段,其中设置了ACK标记,表示正确响应。
一个新的TCP连接就建立了。
为什么要三次握手:确保客户端和服务端都能正确地发送和接收;确保双方都支持TCP。
1、第一次握手:服务端知道对方能正确发送。
2、第二次握手:客户端知道自己能正确发送和正确接收,且对方能正确接收和发送;服务端知道对方能正确发送,自己能正确接收。
3、第三次握手:服务器知道自己能正确发送,对方能正确接收。
六、四次挥手
1、客户端请求断开到服务端的传输,发送一个TCP报文段,其中设置了FIN标记,表示断开链接。
2、服务端接收到请求,回送给客户端一个ACK标记的TCP报文段,表示响应。
3、服务器请求断开到客户端的传输,发送一个FIN标记的TCP报文段。
4、客户端接收到请求,回送给服务器一个ACK标记的TCP报文段。
TCP连接关闭。
为什么要四次握手:
1、第一次和第二次
客户端:我没啥要发的了。
服务端:知道了。
此时,客户端不会再向对方发送数据了,但对方还是可以给自己发送数据。
2、第三次和第四次:
服务器:我也没啥要发的了。
客户端:知道了。
此时,双方都不会再发送数据了。