网页请求的完整过程

众所周知,打开一个网页的过程中,浏览器会因页面上的css/js/image等静态资源会多次发起连接请求,所以我们暂且把这个网页加载过程分成两部分:

html或者jsp/php/aspx 页面加载

css/js/image等网页静态资源加载(假设使用CDN)(静态资源:非服务器动态运行生产的文件)

 

步骤:

1.DNS解析:当用户输入一个网址并按下回车键的时候,浏览器得到了一个域名。而在实际通信过程中,我们需要的是一个IP地址。因此我们需要先把域名转换成相应的IP地址,这个过程称作DNS解析。根据ip找到ip对应的服务器。

1) 浏览器首先搜索浏览器自身缓存的DNS记录。

或许很多人不知道,浏览器自身也带有一层DNS缓存。Chrome 缓存1000条DNS解析结果,缓存时间大概在一分钟左右。(Chrome浏览器通过输入:chrome://net-internals/#dns 打开DNS缓存页面)

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

3) 如果在hosts文件和操作系统缓存中没有找到需要的记录或记录已经过期,则向域名解析服务器发送解析请求。

4) 如果域名解析服务器也没有该域名的记录,则开始递归+迭代解析。

5) 获取域名对应的IP后,一步步向上返回,直到返回给浏览器。

2.建立TCP连接(三次握手)

3.发起HTTP请求(如果资源就在本地浏览器缓存里,那就不需要发出请求到服务端,直接浏览器里获取)

其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个网页的请求。

4.nginx服务器收到请求,根据请求的文件后缀是html还是php来判断这是静态文件还是动态文件,静态文件直接返回html文件,动态文件会先交给php应用服务器(后端服务器)去处理,处理成静态html文件返回给浏览器,因为浏览器只能解析静态html文件。

5.浏览器解析html的时候,会去加载很多静态文件:js/css/img等等,请求先发送到nginx上,通过修改nginx配置,location可以指定这些请求都转发到oss源站上。设置了cdn加速的话,在nginx上直接搭建cdn,nginx就是一个cdn节点服务器,第一次nginx上没有资源,会直接到oss获取,oss获取到资源返回给nginx节点服务器,同时在nginx上缓存一份静态资源,以后再次请求就可以直接到nginx上获取资源,不需要nginx转发请求,再到oss上获取资源。nginx在这里作为一个前端服务器,处理静态资源的。

cdn不是服务器,cdn是内容分发网络,一种应用在服务器上的加速技术。cdn通过在网络各处放置节点服务器,所构成的在现有的互联网基础之上的一层智能虚拟网络。CDN系统能够实时根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息,将用户的请求重新导向离用户最近的服务器节点上。cdn是一种加速服务,收费的。原理是在各个地方部署服务器,把前端内容缓存到这些服务器中(第一次访问后)。

什么是CDN?如果我在广州访问杭州的淘宝网,跨省的通信必然造成延迟。如果淘宝网能在广东建立一个服务器,静态资源我可以直接从就近的广东服务器获取,必然能提高整个网站的打开速度,这就是CDN。CDN叫内容分发网络,是依靠部署在各地的边缘服务器,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度。

解析到js的时候,JavaScript 中调用 XMLHttpRequest 对象,通过 XMLHttpRequest 对象向服务器发送http请求,来请求数据,服务器使用 JSPPHPServlet,ASP.net 等与数据库交互,检索数据,服务器将 XML 数据或 JSON 数据发送到nginx服务器,再返回给客户端。浏览器渲染html模板和数据,最终显示出用户看到的画面。

 

 

ps:跨域访问

user访问服务器的页面A,页面A同时又要访问另一个网站B的某个资源。这就叫做跨域访问。会引起CSRF攻击。

 

 

 

 





 

 

 

 

posted @ 2021-04-22 16:02  一只测试小菜鸡  阅读(1483)  评论(0编辑  收藏  举报