网页请求全过程

135 阅读2分钟

流程

graph TD
a("dns解析")
b("建立tcp链接")
c("发送http请求")
d("nginx处理")
d1("无cdn")
d2("有cdn")
e("浏览器解析")
f("静态文件加载")
g("返回资源")
a -->b --> c --> d --> e 
f -.-> d1 --"oss源站获取直接返回"--> g
f --> d2 --"无资源oss获取并缓存,有资源直接返回"--> g

subgraph nginx
    d
    d1
    d2
end

页面加载过程

1.DNS解析

  • 浏览器一个域名,首先搜索浏览器自身缓存的DNS记录;
  • 浏览器缓存中未找到或过期则搜索hosts文件和操作系统缓存
  • 未找到或过期则向域名解析服务器发送解析请求;
  • 未找到则开始递归+迭代解析
  • 获取域名对应的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在这里作为一个前端服务器,处理静态资源的。

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

参考

网页请求的完整过程