WEB请求处理之浏览器响应

作为一个web开发人员,我们需要了解最基本的web信息传递的过程,在面试过程中,我们也会经常遇到http请求之类的问题,因此这篇文章就简要分析了web请求处理的基本过程以及基本原理.


WEB请求处理的基本流程

当我们使用浏览器进行浏览操作的时候,会产生一系列的数据请求。现在浏览器和服务器之间的数据交互是基于B/S架构的,而这种架构是建立在HTTP请求的基础上的,当我们在浏览器的地址栏中输入一个网页的地址后,会触发一些列事件,如下图所示:

基本流程如下:

  • 用户输入一个网址
  • DNS域名服务器会将网址解析为IP地址,这里的IP地址对应着唯一一台服务器
  • 浏览器客户端通过TCP协议与服务器建立连接:这里会经过三次握手
  • 连接建立成功后,客户端发送HTTP Request 请求
  • WEB服务器接收到请求时 会返回HTTP Response 回复
  • 浏览器端接收数据
  • 浏览器发送关闭连接请求:TCP四次挥手后关闭连接
  • 浏览器对接收到的网页进行渲染

以上就是我们访问网页时会触发的一系列事件,也是web请求处理的基本流程,接下来对几个概念详细介绍.


TCP协议以及三次握手和四次挥手

TCP协议是OSI七层协议中传输层的一项协议,它是一种面向连接的可靠交付的数据传输协议,和UDP用户数据报协议不同的是,它需要建立连接,并且需要无差错和可靠地交付数据。通过TCP建立连接,需要经过三次握手,关闭TCP连接需要四次挥手。

OSI七层模型中TCP处于的层级位置如图所示

TCP三次握手

TCP建立连接是为了可靠地传输数据,因此建立过程比较复杂,以确保可靠地传输数据。具体流程如下图所示:

  • Client首先发送一个连接试探,ACK=0 表示确认号无效,SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,seq = x 表示Client自己的初始序号(seq = 0 就代表这是第0号包),这时候Client进入syn_sent状态,表示客户端等待服务器的回复。

  • Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。TCP报文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到(ack=1其实是ack=0+1,也就是期望客户端的第1个包),seq = y 表示Server自己的初始序号(seq=0就代表这是服务器这边发出的第0号包)。这时服务器进入syn_rcvd,表示服务器已经收到Client的连接请求,等待client的确认。

  • Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK 置1 表示确认号ack= y + 1 有效(代表期望收到服务器的第1个包),Client自己的序号seq= x + 1(表示这就是我的第1个包,相对于第0个包来说的),一旦收到Client的确认之后,这个TCP连接就进入Established状态,就可以发起http请求了。

TCP四次挥手

当数据传输成功后需要关闭连接,这就是TCP四次挥手。四次挥手比握手还要复杂,具体流程如下图所示:

  • 客户端A发送一个FIN,用来关闭客户A到服务器B的(报文段4)此时客户端就从Established状态进入了FIN-WAIT1状态。
  • 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。服务器从ESTABLISHED状态转换成为了CLOSE-WAIT状态
  • 服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
  • 客户端A发回ACK确认,并将确认序号设置为收到序号加1

在这个过程中,为什么会涉及到四次挥手呢,这是因为在客户端发送主动关闭连接请求时,服务器端收到关闭请求并返回确认收到请求报文,但是服务器不会立即关闭,因为在这个时间段内可能还会有数据传送,服务器端会继续传送数据给客户端,当没有数据传送时,服务器端会主动发送报文给客户端请求关闭,等待客户端返回确认时服务器端就进入了close状态。


HTTP协议

从上面的OSI七层模型中我们可以看到HTTP处于七层协议中的应用层,也就是最接近用户的一层。它主要是处理WEB数据请求,它是无状态无连接的协议。无状态是指上一次传送的数据是没有存储下来的,下一次操作获取不到上次的数据。无连接是指需要请求数据时才会建立连接,否则处于无连接状态。在WtEB请求处理过程中,我们主要是关心HTTP请求头和响应头还有就是状态码.

下面是使用FIDDLER抓包工具抓取的请求包
CONNECT www.baidu.com:443 HTTP/1.1
Host: www.baidu.com:443
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36


DNS域名解析服务器

人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是多对多的关系,一个ip地址不一定只对应一个域名,且一个域名可以对应多个ip地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。

由于DNS域名解析有些复杂,本文章就不就过多的讲解。


总结:以上就是web请求处理中浏览器响应的相关知识,由于涉及到的 知识太多因此没哟很详细的将解,只将解了部分的重要内容,待到以后学习加深,进一步完善。

你可能感兴趣的:(WEB请求处理之浏览器响应)