浏览器访问页面步骤

 
面试时经常被问到:浏览器访问一个页面的时候背后的步骤是怎样的?
 
我往往是把HTTP请求和响应讲了一下。
 
现在想想,感觉仅仅回答HTTP请求和响应有点太窄了。
所以,这里主要从计算机网络的角度将浏览器访问一个页面的背后的过程进行一个较为详细的解读。
 
域名->IP
 
当在浏览器中访问一个网址的时候,首先要做的就是找到域名所对应的服务器的IP地址。
浏览器通常有三个途径来找IP地址。
  1. 缓存。包括浏览器的DNS缓存和OS的DNS缓存。
  2. HOST文件。浏览器会去本地的HOST文件中寻找域名对应的IP地址。
  3. 域名服务器查询。向本地域名服务器求助(一般是路由器),如果得不到还得向更高层次的域名服务器(根域名服务器、顶级域名服务器、权限域名服务器)求助。本地域名服务器向高级域名服务器查询可以是迭代查询或递归查询。

HTTP

得到服务器的IP地址后,需要向服务器请求所要加载网页的资源(HTML文件、图片等)。
这些资源的请求和获取可以通过HTTP完成。
而HTTP协议位于应用层,其是建立在传输层的TCP协议的基础之上。
想要完成HTTP请求和响应还需要通过TCP建立一个浏览器跟服务器的连接。
 
TCP连接
HTTP的默认端口是80。
HTTPS的默认端口是443。
 
当没有特别指定的时候,服务器的端口就是默认端口。
浏览器的请求方端口是动态端口(范围49152~65535),并不固定。
 
TCP连接的建立需要通过“三次握手”来完成。
 
而TCP连接的建立还需要通过许多传输层以下协议栈的协议来提供支持:
  • 需要通过网络层IP协议来完成浏览器所在主机到服务器主机间的数据传输。
  • 需要通过ARP协议完成IP地址到硬件地址的解析。
  • 需要通过OSPF(一种内部网关协议)完成路由选择。
  • ......
 
HTTP
当建立起TCP连接后,就可以发送HTTP请求了。
浏览器向服务器发送一个HTTP请求来请求资源。
 
服务器收到一个HTTP请求后,对请求进行相应的处理,比如说身份的验证、根据用户身份确定资源的具体内容(比如用户的个人信息页面,根据用户ID从数据库获取相应信息再生成html文件)。
在完成相应的处理后,通过HTTP响应将资源发送给浏览器。
 
当然,有可能在处理的时候发生一些情况,比如说:用户身份验证失败,该用户身份不够权限访问该资源,服务器处理过程中出现错误等。
所以,在HTTP响应中还要加入相应的状态码以告诉浏览器当前请求的处理状态。
 
在HTTP响应后,面临着是否释放TCP连接的问题。这就是HTTP中的长连接和短连接问题。
  • 短连接在客户端和服务器进行一次HTTP操作后就中断连接。
  • 长连接在客户端和服务器进行HTTP操作后的一定时间内仍保持连接。
  • HTTP 1.0默认是短连接。
  • HTTP 1.1默认是长连接。
  • 可以通过头部字段Connection来决定长连接(keep-alive)或是短连接。
 
TCP的释放
TCP连接的释放需要通过“四次挥手”来完成。
 
浏览器的渲染
当浏览器收到服务器返回的HTTP响应后,需要对HTTP响应的内容进行解析,并渲染到屏幕上。
例如,HTTP响应的内容是一个HTML文件,那么浏览器对HTML文件进行解析,并把其表示的内容渲染到屏幕上。HTML文件中可能还包含了外部文件,比如说图片,那么还要再重复一下之前的过程,再从服务器中获取该文件。
 
缓存
浏览器可以对拿到手的资源进行缓存,避免对一个资源的重复请求获取,节约时间提升性能。
资源的缓存状态是由HTTP header来决定的。
 
浏览器缓存可以分为两类:强缓存和协商缓存
强缓存:上一次的HTTP交互中,服务器通知了浏览器一个缓存时间,在该时间内对该资源的请求都可以直接使用缓存。
协商缓存:向服务器发送请求,服务器会根据这个请求的request header的参数来判断是否命中,如果命中则返回304状态码告诉浏览器可以直接使用缓存,否则就重新处理请求并返回资源。
判断命中与否主要是通过对request header中的If-Modified-Since和Etag字段与服务器上资源的信息进行比对分析得出的。
 
--------------------文章二---------------------
--------------------文章三--------------------

浏览器访问一个网站所经历的步骤

1.PC 在浏览器输入域名
2.域名通过DNS服务解析域名,然后DNS服务器返回http服务的IP地址
3.浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
 
4.TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。(使用了比如说,用HTTP的GET方法请求一个跟域名,协议可以采用HTTP1.0。)
5.服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器。如果是慕课网的页面就会把完整的HTML页面代码返回给浏览器。
6.浏览器拿到了简书网的完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求都需要经过上面的主要的七个步骤。
7.浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。
 
 
 
posted @ 2020-02-17 17:08  gaoyang'Blog  阅读(3478)  评论(0编辑  收藏  举报