PHP 网络请求的流程通常涉及到 Web 服务器(如 Nginx)和 PHP 解释器(如 PHP-FPM)的配合。以下是 PHP 网络请求的流程以及 Nginx 的响应过程:(重点4,5步)
PHP 网络请求流程:
-
用户发起请求: 用户在浏览器中输入URL或与Web应用互动,发送HTTP请求到Web服务器。
-
DNS解析和建立TCP连接: Web浏览器解析域名并建立到Web服务器的TCP连接,通常使用HTTP(端口80)或HTTPS(端口443)。
-
Web服务器接收请求: Web服务器(如 Nginx)接收到HTTP请求,然后根据请求的URL和其他信息将请求路由到适当的虚拟主机或应用程序。
-
Nginx处理请求: Nginx可能会进行一些预处理,如静态文件缓存、反向代理或负载均衡,然后将请求传递给后端应用程序服务器,通常是PHP-FPM。
-
PHP-FPM处理请求: PHP-FPM(FastCGI Process Manager)是一个PHP的FastCGI实现,它接收并处理PHP请求。它会将请求传递给PHP解释器。(与4结合着理解,这两个就是Nginx用作分布式服务器的核心步骤,在Nginx服务器中的原理也就这两步,具体工作和面试都会用到重中之重)
-
PHP解释器执行脚本: PHP解释器将PHP脚本执行为HTML或其他输出,可以包括数据库查询、文件操作、业务逻辑等。
-
生成HTTP响应: PHP脚本生成HTTP响应,包括HTTP响应头和HTTP响应体。响应头包括状态码、内容类型等。
-
响应返回到Nginx: 生成的HTTP响应返回到Nginx,通常是通过FastCGI协议。
Nginx响应过程:
-
Nginx接收响应: Nginx接收PHP生成的HTTP响应。
-
Nginx处理响应: Nginx可以进行额外的处理,如压缩响应、添加响应头或处理缓存。
-
Nginx发送响应到客户端: 最终,Nginx将处理过的HTTP响应发送到用户的浏览器。
-
浏览器接收响应: 浏览器解析HTTP响应并呈现内容,这可能包括HTML、CSS、JavaScript、图像等。
-
页面呈现: 浏览器将内容渲染到屏幕上,呈现给用户。
-
连接关闭: 一旦页面呈现完毕,连接可能会保持打开以获取其他资源,或者关闭,具体取决于HTTP头信息和浏览器行为。
这是 PHP 网络请求的一般流程,以及Nginx的响应过程。此流程涵盖了从用户发出请求到浏览器呈现页面的整个过程,中间涉及多个层次和组件的协同工作。