Heim >Backend-Entwicklung >PHP-Tutorial >web服务器 - .net,java,php这些服务器端的进程是如何获取web客户端传递的参数的?

web服务器 - .net,java,php这些服务器端的进程是如何获取web客户端传递的参数的?

WBOY
WBOYOriginal
2016-06-06 20:43:301017Durchsuche

首先谈下我对这个过程的模糊认识:
1.Web客户单向Web服务器发起请求
2.Web服务器启动一个CGI进程,CGI进程从打开的文件描述符中读取请求数据
3.问题:
a.CGI进程如何将请求参数传递给.net,java,php这些进程?
b.net,java,php这些进程是一直运行的吗?
c.一个简单的HTTP请求至少要涉及到3个进程间的通信?

回复内容:

首先谈下我对这个过程的模糊认识:
1.Web客户单向Web服务器发起请求
2.Web服务器启动一个CGI进程,CGI进程从打开的文件描述符中读取请求数据
3.问题:
a.CGI进程如何将请求参数传递给.net,java,php这些进程?
b.net,java,php这些进程是一直运行的吗?
c.一个简单的HTTP请求至少要涉及到3个进程间的通信?

a、通过环境变量和STDIN传递信息
b、CGI进程有几种运行方式,普通的CGI是不一直运行的,每次请求都会创建一个CGI进程,但是这种方式会导致CGI进程的频繁创建和销毁浪费性能,所以就有了FAST-CGI,CGI进程会在一个进程池里呆着,每当有请求就会唤醒一个进程去处理,处理完成就回到进程池
c、以lnmp为例,请求首先送给Nginx,然后由nginx交给php-fpm,php-fpm是PHP的FAST-CGI管理器,收到nginx发来的请求后再传递给php-cgi,处理完成再传递回去,于是就有三个进程参与此次请求的处理

既然是web客户端的就大致说下走http的数据把:
题主可以先看看http文件格式,我们的GET、POST、COOKIE这些数据都是包装在http信息里面的纯文本,
到server端,收到这些http数据的软件会对这些纯文本进行解析,就这样

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn