用户访问网站时都走了什么流程

访问网站的全部步骤:在浏览器输入网址,浏览器解析域名。先从本地hosts文件中查找,如果没有查到,会发一个DNS(Domain Name System)请求到本地DNS服务器,本地DNS服务器从缓存中查询,如果没有的话还要向DNS根服务器查询。DNS根服务器会返回域服务器的地址,请求域服务器后会返回解析服务器的地址,最后本地DNS向域名的解析服务器发出请求,返回域名和IP的对应关系,本地DNS服务器把结果返回并加入自己的缓存,便于下次查询加快访问。

拿到域名和ip后,浏览器会以一个随机端口(1024-65535)向服务器的web程序80端口发起TCP的连接请求。这个连接请求到达服务端后,进入到网卡,到达web程序,建立起TCP/IP的连接。Nginx读取配置文件,并根据请求头的相关信息,根据host来匹配所有的虚拟主机的配置文件的server_name。如果匹配就读取该虚拟主机的配置。这时候根据配置,如果匹配到php文件就交给后端的fastcgi进程取处理,nginx加载fast-cgi模块,根据配置fast-cgi将PHP文件转发到127.0.0.1:9000地址,php-fpm 监听127.0.0.1:9000,php-fpm 接收到请求,启用worker进程处理请求 ,php-fpm 处理完请求(PHP内部流程为前置的调取配置文件,调用各个扩展的模块初始化方法,使其可用,将PHP代码转换为语言片段,将语言片段转换成有意义的表达式,将表达式编译成Opcode(zend_compire_file),顺次执行Opcode,从而实现PHP脚本的功能(zend_excute),一旦页面执行完毕,unset变量,关闭模块,结合数据库查出数据,填充模板生成html文件),返回给nginx。这样浏览器就拿到了html代码,同时nginx记录日志。浏览器根据内核不同,过程大致为解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树。如果有图片,css,js就会不断发起异步请求来获取这些资源。

打赏作者

发表评论

电子邮件地址不会被公开。