输入www.baidu.com
1 客户端
浏览器先对地址格式化:http://www.baidu.com/
然后浏览器会查询本地host文件寻找对应的ip
接着就是查找dns服务器寻找对应的ip
找到ip之后开始建立tcp链接
接着是发送请求命令
发送请求头
然后是服务端应答
服务端发送应答头信息
服务端向浏览器发送数据
服务端关闭tcp链接
2 服务端
其中服务端应答过程如下(服务端以nginx+php-fpm+mysql为例)
nginx启动manger进程
a、接收来自外界的信号
b、向worker发送信号
c、监控worker进程的运行状态
d、管理worker进程
然后启动worker进程
所有的worker进程监听同一个socket
当有请求到来时worker进程的socket read事件变为可读,然后开始抢互斥锁,抢到的对请求进行处理(惊群:nginx的处理是当worker的过载时(过载:负载达到最大值的7/8)就不再去争抢)
然后进行url rewrite
请求php-fpm
php-fpm服务器也会启动一个manger进程、多个worker进程
不同的是php-fpm会接收nginx发送过来的请求,然后分配给worker进程处理(避免惊群)
然后php-fpm会去调用php程序
php-fpm使用的fastcgi协议,进程会对php常驻内存的处理
3 php程序
接收参数->处理业务逻辑->查询缓存->查询数据库->返回结果
其中数据库查询过程:sql->查询缓存->语法解析->语法树->查询优化->执行计划->存储引擎api->数据整理->返回结果
转载请注明:小Y » 一个HTTP请求从发起到返回结果都经历那些事情