通用网关接口 CGI

CGI(CommonGatewayInterface)是Web服务器与外部应用程序通信的接口,用于动态生成网页内容。它解决了服务器与程序间信息传递的问题,允许服务器执行CGI程序并将结果返回给浏览器。然而,由于每个请求会启动新的CGI进程,大量请求可能导致性能下降。CGI程序可以使用任何能处理服务器接口的语言编写,并依赖于特定的环境变量如REQUEST_METHOD和CONTENT_TYPE来传递信息。
摘要由CSDN通过智能技术生成

        通用网关接口(Common Gateway Interface, CGI)是一个 Web 服务器(Server)主机提供信息服务的标准接口,通过提供这样一个标准接口,Web 服务器能够执行应用程序并将它们的输出,如文字、图形、声音等传送给一个 Web 浏览器。一般来说,CGI 标准接口的功能就是在 HTML 文档与服务器应用程序之间传递信息。

        CGI标准接口主要解决以下几个问题:

  1. Web 服务器和 CGI 程序之间如何传送信息?
  2. Web 服务器向 CGI 程序传送什么信息?
  3. Web 服务器向 CGI 程序传送信息的格式是什么?
  4. CGI 程序向 Web 服务器返回什么信息?
  5. CGI 程序向 Web 服务器返回信息的格式是什么?

如果没有 CGI,一个 Web 服务器将指南提供静态文本文件或连接到其他服务器。

个人理解

协议和接口:

  1. 协议和接口都是在阐述两个程序之间如何进行信息交互。
  2. 协议是远程规范,即不同机器间的信息交流
  3. 接口是同一个机器上的不同软件如何进行信息交流。
  4. 协议和接口主要说明两个事情:
    1. 如果你想要获取我给你的信息,你应该怎么做?
    2. 如果你想发信息给我,你可以怎么做?
  5. 主动发起信息交互的程序实现这个接口,而接收信息方使用这个接口。
  6. nginx主动调用php,所以nginx实现这个接口,php通过这个接口知道怎么获取它想要的信息,以及如何把信息正确传回去。

程序和服务:

  • 进程:运行的程序。
  • 守护进程:一直运行在后台的程序。
  • 服务:监听端口,对外提供服务的守护进程,web服务,svn服务,mysql服务。
  • Web服务:实现http和https协议的服务。

命令和语言:

  • 命令:可以直接执行的二进制文件。
  • 语言:其实就是把其他常用的命令封装起来,以一种统一的方式去调用其他命令,是一个比较复杂的命令。

Web 服务器:

  • 监听端口,接收客户端传来的数据,并返回相应的数据回客户端。
  • 静态文件也是返回的文本数据,并不是返回一个文件,而是把文件的内容返回回去。
  • 文件:就是一个有边界的数据,不同的文件有不同的解析方式。
  • web服务器并不是一门语言,所以无法处理太复杂的逻辑,但它可以通过cgi接口,调用可以处理数据的语言,而它只需要把处理完的数据返回给客户端即可。

        通过CGI方式访问全球互联网www可以分为以下几个步骤:

  1. 浏览器分析 url 的第一部分,并试图连接到相应的服务器。
  2. 浏览器提供 url 的其余部分给服务器
  3. 服务器将 url 翻译成一个路径和文件名。
  4. 服务器将 url 指向一个应用程序而不是一个静态文件
  5. 服务器为应用程序执行做准备
  6. 应用程序执行,读取标准输入和有关环境变量
  7. 应用程序准备进行标准输出
  8. 应用程序发生标准输出并结束
  9. 服务器断开连接
  10. 浏览器显示应用程序的输出结果。
CGI 工作目录

        CGI 工作目录是一个特定的目录,所有编译好的 CGI 程序都要集中放在这个 CGI 工作目录中。对于 UNIX 系统而言,最常见的 CGI 工作目录是 CGI-BIN;Windows系统是 CGI-WIN 。当服务器看到被请求的程序位于 CGI 目录时,就知道它是一个 CGI 程序,从而去执行该程序,并将执行结果返回给浏览器。

CGI 缺点

        CGI 应用程序一般都是一个独立的可执行程序,和web服务器各自占据不同的进程,二一般一个 CGI 应用程序只能处理一个用户请求。这样,每有一个用户请求,都会激活一个 CGI 进程,当用户请求数量非常多时,将会大量挤占系统的资源,造成效能低下。

CGI 程序语言

        任何一个程序语言所设计的应用程序,如果可以在服务器上执行,并利用服务器与 CGI 程序的标准接口来传送有关信息,则这种程序语言旧可以称之为“CGI程序语言”。

CGI 环境变量

web服务器除了将用户发送的信息传递给 CGI 程序之外,还通过设置环境变量的方式,提供一些相关的状态信息和环境信息。

  • REQUEST_METHOD:指出服务器和 CGI 程序之间的信息传输方式,POST | GET。
  • CONTENT-TYPE:指示传送的信息的 MIME 类型,表单:application/x-www-form-urlencoded
  • CONTENT_LENGTH:如果服务器与 CGI 程序信息的传送方式是 POST,这个环境变量就是从标准输入 STDIN 中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须用到。
  • QUERY_STRING:如果服务器与 CGI 程序信息的传送方式是 GET,这个环境变量的值就是所传送的信息。
  • REMOTE_ADDR:发送请求的客户机的 IP 地址,这个值总是存在的。
  • REMOTE_HOST:客户机主机名
  • SERVER_NAME:服务器的主机名或其 IP 地址。
  • SERVER_HOST:服务器接收请求时所使用的端口号,Web 服务器使用这个端口来监听到达的 CGI 请。
  • SERVER_PROTOCOL:发送请求的协议名称和版本号,HTTP/1.0
  • SCRIPT_NAME:调用 CGI 程序时所使用的文件名。/cgi-bin/hello.exe
  • HTTP_USER_AGENT:客户机上浏览器的有关信息
  • PATH_INFO:路径信息
CGI 格式化输出

两条必须遵循的准则:

  • 必须输出到标准输出 STDOUT
  • 任意输出前面必须有一个用于定义 MIME 类型的输出内容(Content-type)行,而且随后还必须跟一个空行。
CGI 标题
用于与服务器通信的标准 CGI 标题
标题描述
Content-type    设定随后输出数据所用的 MIME 类型。只要 CGI 程序需要输出非 CGI 标题的信息,则内容类型必须为第一行
Location指出输出为另一个文档而不是当前文档,其值为文档的标识地址(URL)
Status       指定HTTP状态码,服务器将把这个状态码与响应信息一起返回给客户机

        这个三个标准 CGI 标题必须独占一行,后面再接一个空行。这样,服务器才能正确解释这个输出,并根据该输出生成一个正确的 HTTP 响应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值