# package cgi

`import "net/http/cgi"`

cgi包实现了CGI（Common Gateway Interface，公共网关协议），参见RFC 3875。

注意使用CGI意味着对每一个请求开始一个新的进程，这显然要比使用长期运行的服务程序要低效。本包主要是为了兼容现有的系统。

## func Request

    func Request() (*http.Request, error)

返回一个当前环境下的HTTP请求。它假设当前程序执行在CGI环境下，成功返回的Request的Body是可读取数据的。（如果必要）

## func RequestFromMap

    func RequestFromMap(params map[string]string) (*http.Request, error)

使用CGI变量集params创建一个HTTP请求。返回的Request的Body是没有数据的。

## func Serve

    func Serve(handler http.Handler) error

在当前活跃CGI环境下执行handler；如当前无CGI环境，会返回错误。handler为nil时将使用http.DefaultServeMux。

## type Handler

    type Handler struct {
        Path string // CGI可执行文件的路径
        Root string // handler的根URI前缀，""代表"/"
        // Dir指定CGI程序的工作目录。
        // 如果Dir为""则使用Path的基目录；如果Path没有基目录则使用当前工作目录。
        Dir string
        Env        []string    // 额外设置的环境变量（如果有），格式为"key=value"
        InheritEnv []string    // 从host继承的环境变量，只有"key"
        Logger     *log.Logger // 可选的logger接口切片，如为nil则使用log.Print
        Args       []string    // 可选的传递给子进程的参数
        // 当CGI进程返回一个Location头，且其值以"/"开始时，
        // 本字段指定处理内部重定向的根部HTTP Handler。参见RFC 3875 § 6.3.2。
        // 一般会使用http.DefaultServeMux。
        // 如果为nil，返回一个本地URI路径的CGI回复会发送给客户端，不进行内部跳转。
        PathLocationHandler http.Handler
    }

Handler在子进程中执行具有一个CGI环境的可执行程序。

### func (*Handler) ServeHTTP

    func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request)