cgi原理
CGI原理
CGI(Common Gateway Interface)通用网关接口,CGI描述了服务器和请求处理程序之间传输数据局的一种标准。在理解的过程中我们需要区分CGI和CGI程序,CGI是一种数据传输的标准,而CGI程序是实际处理业务的一个程序。webserver每请求一次,CGI程序就会fork出一个子进程进行处理。CGI程序的参数通过环境变量和标准输入获得,它的相应通过标准输出传递给webServer。
CGI的工作原理是:
- 客户端通过http将请求发送到web服务器
- web服务器接收并收集用户请求,然后交给CGI程序进行处理
- CGI程序把处理后的结果发送给服务器
- 服务器将结果传送给浏览器
其中上述第二步web服务器通过环境变量或标准输入将请求发送给CGI程序,第三步CGI通过标准输出将结果发送给webServer
CGI接口标准:标准输入,环境变量以及标准输出
借口标准 | 介绍 |
---|---|
标准输入 | CGI程序像其他可执行程序一样,可通过标准输入(stdin)从Web服务器得到输入信息,如Form中的数据,这就是所谓的向CGI程序传递数据的POST方法。这意味着在操作系统命令行状态可执行CGI程序,对CGI程序进行调试。POST方法是常用的方法。 |
环境变量 | 操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了自己的一些环境变量,用来向CGI程序传递一些重要的参数。CGI的GET方法还通过环境变量QUERY-STRING向CGI程序传递Form中的数据。 |
标准输出 | CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。 |
###常用的环境变量
Linux中的环境变量是一系列的键值对集合,它们的值可以通过shell设置,也可以被其他进程或程序设置和访问,它们是web服务器传递给CGI程序的一种最简单的方式,之所以叫做环境变量是因为它们是全局变量,任何程序都可以存取它们。
key | 意义 |
---|---|
SERVER_NAME | CGI脚本运行时的主机名和IP地址 |
SERVER_SOFTWARE | 你的服务器的类型如: CERN/3.0 或 NCSA/1.3. |
GATEWAY_INTERFACE | 运行的CGI版本. 对于UNIX服务器, 这是CGI/1.1 |
SERVER_PROTOCOL | 服务器运行的HTTP协议. 这里当是HTTP/1.0. |
SERVER_PORT | 服务器运行的TCP口,通常Web服务器是80. |
REQUEST_METHOD | POST 或 GET, 取决于你的表单是怎样递交的 |
HTTP_ACCEPT | 浏览器能直接接收的Content-types, 可以有HTTP Accept header定义. |
HTTP_USER_AGENT | 递交表单的浏览器的名称、版本 和其他平台性的附加信息。 |
HTTP_REFERER | 递交表单的文本的 URL,不是所有的浏览器都发出这个信息,不要依赖它 |
PATH_INFO | 附加的路径信息, 由浏览器通过GET方法发出. |
PATH_TRANSLATED | 在PATH_INFO中系统规定的路径信息. |
SCRIPT_NAME | 指向这个CGI脚本的路径, 是在URL中显示的(如, /cgi-bin/thescript). |
QUERY_STRING | 脚本参数或者表单输入项(如果是用GET递交). QUERY_STRING包含URL中问号后面的参数 |
REMOTE_HOST | 递交脚本的主机名,这个值不能被设置. |
REMOTE_ADDR | 递交脚本的主机IP地址. |
REMOTE_USER | 递交脚本的用户名. 如果服务器的authentication被激活,这个值可以设置。 |
REMOTE_IDENT | 如果Web服务器是在ident (一种确认用户连接你的协议)运行, 递交表单的系统也在运行ident, 这个变量就含有ident返回值. |
CONTENT_TYPE | 如果表单是用POST递交, 这个值将是 application/x-www-form-urlencoded. 在上载文件的表单中, content-type 是个 multipart/form-data. |
CONTENT_LENGTH | 对于用POST递交的表单,标准输入口的字节数. |