WEB请求过程

WEB请求过程

一次完整的WEB请求过程

一次完整的web访问流程

前言:当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面。网速好的话这之间可能就一秒,但在这一秒内到底发生了什么?

大致过程如下:

一次完整的web访问流程简析:

  • client:输入网址–>发起http request–>等待web server响应.
  • server:收到client请求–>加载资源–>构建响应报文,发给client.
  • 注:以下分析不考虑缓存问题.

client发起http请求:

  • ①client将键入的域名解析为server端的IP地址(DNS解析).

  • ②client与server进行TCP连接(三次握手).

  • ④client与web server数据传输.

  • ④client与web server断开TCP连接(四次挥手).

  • ⑤client解释HTML文档,浏览器渲染,将在屏幕上显示渲染后的图形结果。

server收到client请求时:

  • ①http request请求首先到达server端的公网ip上(公网ip一般配置在硬件防火墙上).

  • ②经过防火墙过滤之后,到达负载均衡层(可能涉及四层负载均衡和七层负载均衡),负载均衡将请求报文往后端Real Server调度.

  • ③经过lvs调度至后端RS上,此时后端提供web服务的一般是Nginx(Apache也可能),Nginx判断请求报文是动态资源还是静态资源(动静分离).

  • ④静态资源:由Nginx发起系统调用,请求内核从磁盘加载相应的资源文件,可能涉及存储服务器(资源的保存的服务器).
    动态资源:由Nginx代理给能处理动态资源的服务器(Tomcat、PHP等),还可能涉及访问数据库服务器.

  • ⑤web server将请求的资源加载完成之后,构建响应报文发送给client.

client端

浏览器访问某个网址

​ 当用户在浏览器输入一个域名然后回车,至服务器给予响应的整个过程,即一次web访问过程

  • 一般的情况是发起一个http request请求(此处以访问服务器某个资源为例,没有考虑上传博客文章等上传请求~)

  • 此处以访问百度首页为例:[http://]www.bai.com

DNS解析

  • DNS解析:比如现在访问百度的首页:[http://]www.bai.com, DNS解析主要功能是将www.bai.com这个域名解析成ip地址。

◆ DNS解析的过程:

  • 1)浏览器首先搜索浏览器自身缓存的DNS记录,浏览器自身也带有一层DNS缓存。比如:Chrome 缓存1000条DNS解析结果,缓存时间大概在一分钟左右。

  • 2)如果浏览器缓存中没有找到需要的记录或记录已经过期,则搜索hosts文件和操作系统缓存。

    • 操作系统缓存:
      在Windows操作系统中,可以通过 ipconfig /displaydns 命令查看本机当前的缓存。
    • windows的hosts文件解析:
      windows:主机的hosts文件路径:C:\Windows\System32\drivers\etc\hosts。hosts文件解析的结果一旦被使用,同样会被缓存到操作系统缓存中。
  • 3)如果在hosts文件和操作系统缓存中没有找到需要的记录或记录已经过期,则向域名解析服务器发送解析请求。

    • 此处涉及域名解析服务的工作原理:迭代查询?递归查询?还涉及CDN等等,详情见DNS,下面简述:
      • 首先是DNS服务器有对应记录?
        有缓存,直接返回对应的IP地址。
        无缓存,(.)根域服务器–>(com)DNS服务器–>(baidu)DNS服务器–>回复一一开始访问的DNS服务器www主机的ip地址—>DNS服务器响应给浏览器。
  • 图示过程:

​ 递归查询:返回的最终结果ip查询。
​ 迭代查询:返回的不是最终结果的ip,返回的是让你问别的dns服务器。

  • 4)获取域名对应的IP后,返回给浏览器。

  • 5)浏览器获取IP地址之后,将http request发送给IP地址(server ip)对应的服务器。

与访问的目标主机进行TCP连接

1)、浏览器会选择一个随机端口(大于1024)向server ip的80端口发起TCP连接请求.

  • TCP连接(三次握手)建立过程

  • Wireshark抓取通信过程,报文如下:

  • 网络通信的具体过程,详情见网络章节

2)、TCP连接建立之后,浏览器会将http请求报文发送给server.

3)、然后服务器会发送响应报文给client(即浏览器).

浏览器渲染页面的过程

详情见文章:浏览器渲染原理及流程

server端

server端响应web请求图示:

server收到client请求时:

  • ①http request请求首先到达server端的公网ip上(公网ip一般配置在硬件防火墙上).

  • ②经过防火墙过滤之后,到达负载均衡层(可能涉及四层负载均衡和七层负载均衡),负载均衡将请求报文往后端Real Server调度.

  • ③经过lvs调度至后端RS上,此时后端提供web服务的一般是Nginx(Apache也可能),Nginx判断请求报文是动态资源还是静态资源(动静分离).

  • ④静态资源:由Nginx发起系统调用,请求内核从磁盘加载相应的资源文件,可能涉及存储服务器(资源的保存的服务器).
    动态资源:由Nginx代理给能处理动态资源的服务器(Tomcat、PHP等),还可能涉及访问数据库服务器.

  • ⑤web server将请求的资源加载完成之后,构建响应报文发送给client.

server如何处理用户请求

☆ 从防护墙到达server的详情具体不阐述,此处主要说明server处理用户请求的过程(收到数据报文–>加载资源–>构建响应报文)

  • ①client的数据报文到达真正处理请求的服务器(图示的1.网络请求).

  • ②server收到用户的请求时,会将数据报文从socket上拷贝到内核上,虽然数据报文发送至网卡上,但是网卡绑定在内核上(图示中2.Copy到内核空间)

  • ③内核收到请求的数据报文后,先将数据报文放到内核空间,然后Copy到用户空间的对应进程内存中(Nginx监听的进程内存中).(图示中3.Copy到用户空间)

  • ④至此Nginx收到用户的请求数据报文,然后对数据报文进行拆开,拆开之后,Nginx主要分析数据报文的应用层协议(请求什么资源,或者…).(图示中4.web处理用户请求)

  • ⑤(承前,client请求的一些静态资源,而且不考虑缓存),则Nginx将发起系统调用,向内核申请请求的资源文件。

    • 此时一般的资源文件是放在远程的存储服务器上的,然后通过网络协议拷贝至本地,然后拷贝至Nginx进程内存。
    • 如果资源文件存放在本地,内核通过读取本地磁盘,将资源文件加载至内核,然后再从内核空间拷贝至Nginx进程内存。
  • ⑥资源加载至Nginx运行内存中时,Nginx将构建响应报文,然后将数据包发给内核(图示中5.响应报文Copy到内核空间)

  • ⑦内核再对响应报文进行封装,构建成一个完整的响应报文数据包,然后通过网卡返回给client.
    资源文件加载至内核,然后再从内核空间拷贝至Nginx进程内存。

  • ⑥资源加载至Nginx运行内存中时,Nginx将构建响应报文,然后将数据包发给内核(图示中5.响应报文Copy到内核空间)

  • ⑦内核再对响应报文进行封装,构建成一个完整的响应报文数据包,然后通过网卡返回给client.

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值