FastCGI是一种二进制协议,用于将交互式程序与Web服务器连接。它是早期通用网关接口(CGI)的变体。FastCGI的主要目标是减少与Web服务器和CGI程序之间的接口相关的开销,允许服务器每单位时间处理更多的Web页面请求。

 对比CGI

通用网关接口(CGI)是一种用于将外部应用程序连接到Web服务器的协议。CGI应用程序在单独的进程中运行,这些进程在每个请求开始时创建,并在最后被拆除。这种“每个请求一个新进程”模型使CGI程序实现起来非常简单,但限制了效率和可伸缩性。在高负载下,用于创建和销毁进程的操作系统开销变得非常重要。此外,CGI流程模型限制了资源重用方法,例如重用数据库连接,内存缓存等。

为了解决CGI的可扩展性缺点,Open Market开发了FastCGI,并在20世纪90年代中期首次将其引入其网络服务器产品中。Open Market最初开发的FastCGI部分是为了响应Netscape专有的进程内应用程序编程接口(API)(Netscape Server应用程序编程接口(NSAPI)),用于开发Web应用程序。

虽然首先由Open Market开发,但FastCGI随后由其他几家网络服务器制造商实施。然而,它的方法与其他方法竞争,以加速和简化服务器子程序通信。Apache HTTP Server模块(如mod_perl和mod_php)大约在同一时间出现,并迅速普及。截至2019年,包括CGI在内的所有这些方法仍然普遍使用。

实施细节

FastCGI不是为每个请求创建新进程,而是使用持久进程来处理一系列请求。这些进程归FastCGI服务器所有,而不是Web服务器。

为了服务传入请求,Web服务器通过Unix域套接字,命名管道或传输控制协议(TCP)连接将环境变量信息和页面请求发送到FastCGI进程。响应通过同一连接从进程返回到Web服务器,然后Web服务器将该响应传递给最终用户。可以在响应结束时关闭连接,但Web服务器和FastCGI服务进程都会持续存在。

每个单独的FastCGI进程可以在其生命周期内处理许多请求,从而避免了每个请求进程创建和终止的开销。同时处理多个请求可以通过多种方式完成:通过一个内部多路复用连接(即一个连接上的多个请求); 通过使用多个连接; 或者通过混合使用这些方法。可以配置多个FastCGI服务器,从而提高稳定性和可扩展性。

网站管理员和程序员可以发现,在FastCGI中将Web应用程序与Web服务器分离,与嵌入式解释器(mod_perl,mod_php等)相比具有许多优势。这种分离允许服务器和应用程序进程独立重启 - 这是繁忙网站的一个重要考虑因素。它还支持实现每个应用程序,托管服务安全策略,这是ISP和Web托管公司的一项重要要求。不同类型的传入请求可以分发到特定的FastCGI服务器,这些服务器已经配备为有效地处理这些类型的请求。

FastCGI点滴的更多相关文章

  1. CGI与FastCGI nginx+PHP-FPM

    本文转载自CGI与FastCGI 1.当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html. ...

  2. IIS8 使用FastCGI配置PHP环境支持 过程详解

    平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵. 在这里,我使用的是FastCGI模块映射的方式配置 ...

  3. FastCgi与PHP-fpm之间的关系

    web server(比如说nginx)只是内容的分发者.比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据.好了,如果现在请 ...

  4. CGI与FastCGI

    当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂, ...

  5. 搞不清FastCgi与PHP-fpm之间是个什么样的关系?

    问 我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义. 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php ...

  6. FastCgi与PHP-fpm关系

    1 CGI  (1)什么是CGI: CGI(Common Gateway Interface)公共网关接口, 是WWW技术中最重要的技术之一,有着不可替代的重要地位, CGI是外部应用程序(CGI程序 ...

  7. CGI, FastCGI, WSGI, uWSGI, uwsgi简述

    CGI 通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据.CGI描述了服务器和请求处理程 ...

  8. fastcgi与cgi的区别

    fastcgi与cgi的区别 先讲下cgi:cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fo ...

  9. nginx+fastcgi+c/cpp

    参考:http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/ 跟着做了一遍,然后根据记忆写的,不清楚有没错漏步骤,希望多多评论多多 ...

随机推荐

  1. 从rnn到lstm,再到seq2seq(二)

    从图上可以看出来,decode的过程其实都是从encode的最后一个隐层开始的,如果encode输入过长的话,会丢失很多信息,所以设计了attation机制. attation机制的decode的过程 ...

  2. Mongo 查询(可视化工具)

    distinct MongoDB 的 distinct 命令是获取特定字段中不同值列表的最简单工具. 该命令适用于普通字段.数组字段以及数组内嵌文档(集合对象). db.getCollection(' ...

  3. python安装scrapy

    Scrapy基于事件驱动网络框架 Twisted 编写,Twisted是一个异步非阻塞框架. 安装 scrapy 要先安装 Twisted,不然无法安装成功,链接: Python Extension ...

  4. HttpsessionListener 实现在线人数统计

    最近在学servlet jsp,用的林信良先生的 jsp&servlet 这本书,在第五章有道在线人数统计的课后题完成,做一次记录. 实际效果: 一:用户类: package cc.openh ...

  5. converting the moment tensor to strie-dip-rake

    在多断层求解的试验中,用到了六个基本矩张量: 而显然,尚不能从图中直接读出strke,dip,rake的值,但有关资料给出了这六个基本矩张量的momet tensor: 而找到一个网站可以方便地将mo ...

  6. opcode cache与JIT的区别

    要说明opcode cache与JIT的区别,得先明白,字节码,又叫中间码与机器码的区别. 操作码(opcode) 一条机器指令.比如我们汇编语言写的一条操作语句. 机器码(machine code) ...

  7. C# 开发ModBus的服务器程序 实现ModBus数据总站 搭建自定义的Modbus服务器 同时支持tcp和rtu

    前言 本文将使用一个NuGet公开的组件技术来实现一个ModBus TCP的服务器端数据引擎,方便的实现接收来自各种设备的数据.并且该服务器模拟真实的设备,包含了数据池功能,可以接受来自任何支持Mod ...

  8. win10 家庭版修改hosts的权限

    https://jingyan.baidu.com/article/624e7459b194f134e8ba5a8e.html

  9. scrapy框架的日志等级和请求传参

    日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息 ...

  10. mql初学事物和视图

    1.概念:一条或者多条sql语句的集合! 事务:就是一堆操作的集合,他们同生共死.要么都执行成功,要么都执行失败 2.事务的特性 ACID A:原子性 完整的,不可分割的 原子性 (Atomicity ...