html请求接口_通用网关接口-FastCGI介绍
一、概述
FastCGI 實(shí)際上是增加了一些擴(kuò)展功能的 CGI 、是 CGI 的改進(jìn),描述了客戶端和Web服務(wù)器程序之間傳輸數(shù)據(jù)的一種標(biāo)準(zhǔn)。
FastCGI 致力于減少Web服務(wù)器與CGI程序之間進(jìn)行互動(dòng)的開(kāi)銷,從而使Web服務(wù)器可以同時(shí)處理更多的Web請(qǐng)求。與 CGI 為每個(gè)Web請(qǐng)求創(chuàng)建一個(gè)新的進(jìn)程不同, FastCGI 使用持續(xù)的進(jìn)程來(lái)處理一連串的Web請(qǐng)求,這些進(jìn)程由FastCGI進(jìn)程管理器管理,而不是Web服務(wù)器。
二、 FastCGI 與 CGI
2.1 相同點(diǎn)
- 與 CGI 一樣, FastCGI 也是語(yǔ)言無(wú)關(guān)的
- 與 CGI 一樣, FastCGI 在獨(dú)立于Web服務(wù)器的(FastCGI)進(jìn)程中運(yùn)行應(yīng)用程序,這種方式相對(duì)于 API 來(lái)說(shuō),具有更高的安全性。 API 將程序代碼接口連接到Web服務(wù)器中,這可能導(dǎo)致:當(dāng)某一個(gè)基于 API 的程序出現(xiàn) bug 時(shí),就會(huì)影響到其他應(yīng)用程序或Web服務(wù)器。例如,一個(gè)惡意的基于 API 的程序可以從其他的應(yīng)用程序或Web服務(wù)器中竊取關(guān)鍵的安全秘密
- 與 CGI 一樣, FastCGI 與任何Web服務(wù)器的內(nèi)部架構(gòu)都不存在綁定關(guān)系,因此,當(dāng)Web服務(wù)器技術(shù)改變時(shí), FastCGI 依舊很穩(wěn)定。如果某個(gè) API 與Web服務(wù)器的內(nèi)部架構(gòu)有關(guān)聯(lián),那么當(dāng)Web服務(wù)器的架構(gòu)發(fā)生變化時(shí),這個(gè) API 也要做出相應(yīng)的改變
2.2 不同點(diǎn)
FastCGI 不僅繼承了 CGI 的優(yōu)點(diǎn),而且還新增了若干新功能。
- 分布式計(jì)算:我們可以Web服務(wù)器以外的機(jī)器上運(yùn)行 FastCGI 應(yīng)用程序。分布式計(jì)算是一項(xiàng)經(jīng)過(guò)驗(yàn)證的技術(shù),該技術(shù)應(yīng)用于:調(diào)整、連接已存在的合作系統(tǒng),充分利用系統(tǒng)性能,提升系統(tǒng)安全性(如 firewalls)
- 多角色與可擴(kuò)展角色: CGI 應(yīng)用程序處理HTTP請(qǐng)求并給出返回值, FastCGI 的功能不止于此,例如,執(zhí)行模塊化的認(rèn)證和身份檢查、轉(zhuǎn)換數(shù)據(jù)格式。FastCGI 的這些特性使其將來(lái)可充當(dāng)更多的角色。
三、架構(gòu)圖
FastCGI 的架構(gòu)圖如下:
FastCGI 的工作流程如下:
【準(zhǔn)備階段】:
1. Web服務(wù)器啟動(dòng)時(shí),初始化 FastCGI 的程序執(zhí)行環(huán)境。例如 Nginx 服務(wù)器對(duì)應(yīng)的 ngx_http_fastcgi_module 模塊
2. FastCGI進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)CGI解釋器進(jìn)程并等待來(lái)自Web服務(wù)器的連接。例如,使用 spawn-fcgi FastCGI進(jìn)程管理器啟動(dòng) demo :
spawn-fcgi -a 127.0.0.1 -p 8080 -f /opt/nginx-1.7.7/cgi-bin/demo說(shuō)明:啟動(dòng) FastCGI 進(jìn)程時(shí),可以配置以 IP 或UNIX域socket兩種方式啟動(dòng)。
【循環(huán)階段】:
3. 當(dāng)客戶端請(qǐng)求到達(dá)Web服務(wù)器時(shí),Web服務(wù)器將該請(qǐng)求采用socket方式轉(zhuǎn)發(fā)到 FastCGI 主進(jìn)程, FastCGI 主進(jìn)程選擇并連接到一個(gè)CGI解釋器(關(guān)聯(lián) FastCGI 子進(jìn)程),然后,Web服務(wù)器將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到 FastCGI 子進(jìn)程。
4. FastCGI 子進(jìn)程完成處理后,將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一socket連接返回給Web服務(wù)器。最后, FastCGI 子進(jìn)程關(guān)閉與Web服務(wù)器之間的連接。
5. FastCGI 子進(jìn)程繼續(xù)等待并處理下一個(gè)來(lái)自Web服務(wù)器的連接。
四、補(bǔ)充
CGI介紹
4.1. 概念、背景及架構(gòu)
CGI(Common Gateway Interface),即通用網(wǎng)關(guān)接口,是WWW技術(shù)中最重要的技術(shù)之一,是外部應(yīng)用程序(即CGI程序)與WEB服務(wù)器之間的接口標(biāo)準(zhǔn),負(fù)責(zé)在CGI程序和Web服務(wù)器之間傳遞信息。CGI是Web服務(wù)器運(yùn)行時(shí),調(diào)用外部應(yīng)用程序(即CGI程序)的規(guī)范,CGI規(guī)范允許Web服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給Web瀏覽器,CGI將Web的一組簡(jiǎn)單的靜態(tài)超媒體文檔變成一個(gè)完整的、新的交互式媒體,按照CGI編寫(xiě)的程序可以擴(kuò)展Web服務(wù)器功能。
出現(xiàn)背景:CGI是比較原始的開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站的方式。由于靜態(tài)的html頁(yè)面無(wú)法實(shí)現(xiàn)網(wǎng)站的動(dòng)態(tài)內(nèi)容的生成,所以就需要由web服務(wù)器調(diào)用CGI程序,CGI程序生成動(dòng)態(tài)內(nèi)容,返回給web服務(wù)器,web服務(wù)器再返回給瀏覽器。
CGI應(yīng)用程序能通過(guò)Web服務(wù)器與瀏覽器進(jìn)行交互,還可以通過(guò)數(shù)據(jù)庫(kù)API與數(shù)據(jù)庫(kù)服務(wù)器等外部數(shù)據(jù)源進(jìn)行通信,從數(shù)據(jù)庫(kù)服務(wù)器中獲取數(shù)據(jù),將數(shù)據(jù)格式化為HTML文檔后,發(fā)送給瀏覽器,也可以將從瀏覽器獲得的數(shù)據(jù)放到數(shù)據(jù)庫(kù)中。如下圖:
幾乎所有Web服務(wù)器都支持CGI,我們可用多種語(yǔ)言編寫(xiě)CGI(包括流行的C、C ++等),只要這種語(yǔ)言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量。
大多數(shù)的CGI程序被用來(lái)解釋處理來(lái)自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器,CGI程序使網(wǎng)頁(yè)具有了交互功能。
4.2 CGI程序處理步驟
1. 瀏覽器通過(guò)HTML表單或超鏈接,請(qǐng)求指向一個(gè)CGI應(yīng)用程序的URL;
2. 服務(wù)器收到瀏覽器發(fā)送的請(qǐng)求;
3. 服務(wù)器調(diào)用執(zhí)行指定CGI應(yīng)用程序;
4. CGI應(yīng)用程序根據(jù)相關(guān)信息(通常是基于瀏覽者輸入的內(nèi)容),執(zhí)行具體的操作;
5. CGI應(yīng)用程序把操作結(jié)果格式化為網(wǎng)絡(luò)服務(wù)器和瀏覽器能夠理解的文檔(通常是HTML網(wǎng)頁(yè)),并發(fā)送給web服務(wù)器;
6. web服務(wù)器把操作結(jié)果返回給瀏覽器。
由于環(huán)境變量的大小是有一定限制的,當(dāng)需要傳送的數(shù)據(jù)量很大時(shí),環(huán)境變量的存儲(chǔ)空間可能會(huì)不足,造成傳輸數(shù)據(jù)接收不完全,甚至無(wú)法執(zhí)行 CGI 程序。因此,后來(lái)又發(fā)展出另外一種方法:POST,也就是利用 I/O 重新導(dǎo)向的技巧,讓 CGI 程序可以由 STDIN 和 STDOUT 直接跟瀏覽器溝通。當(dāng)我們指定用這種方法傳遞請(qǐng)求的數(shù)據(jù)時(shí), web 服務(wù)器收到數(shù)據(jù)后,會(huì)先將這些數(shù)據(jù)放在一塊輸入緩沖區(qū)中,并且將數(shù)據(jù)的大小記錄在 CONTENT_LENGTH 環(huán)境變量中,然后調(diào)用 CGI 程序并將 CGI 程序的 STDIN 指向這塊緩沖區(qū),于是我們就可以很順利的通過(guò) STDIN 和環(huán)境變量 CONTENT_LENGTH 得到服務(wù)器接收的信息,避免了對(duì)傳輸信息大小的限制。
4.3 CGI的優(yōu)缺點(diǎn)
CGI可以為我們提供許多HTML無(wú)法做到的功能,比如記數(shù)器、顧客信息表格的提交以及統(tǒng)計(jì)、搜索程序、WEB數(shù)據(jù)庫(kù)等。
用Html是沒(méi)有辦法記住客戶的任何信息的,要把客戶端的信息記錄在服務(wù)器的硬盤(pán)上,就要用到CGI,這是CGI最重要的作用,它補(bǔ)充了Html的不足,注意:僅僅是補(bǔ)充,不是替代。
CGI 使外部程序與 Web 服務(wù)器之間交互成為可能, CGI 程序運(yùn)行在獨(dú)立的進(jìn)程中,并對(duì)每個(gè) Web 請(qǐng)求建立一個(gè)進(jìn)程,這種方法非常容易實(shí)現(xiàn),但效率很差,難以擴(kuò)展。當(dāng)面對(duì)大量請(qǐng)求時(shí),進(jìn)程的大量建立和消亡會(huì)使操作系統(tǒng)性能大大下降,此外,由于地址空間無(wú)法共享,也限制了資源重用。1. 概念、背景及架構(gòu)
CGI(Common Gateway Interface),即通用網(wǎng)關(guān)接口,是WWW技術(shù)中最重要的技術(shù)之一,是外部應(yīng)用程序(即CGI程序)與WEB服務(wù)器之間的接口標(biāo)準(zhǔn),負(fù)責(zé)在CGI程序和Web服務(wù)器之間傳遞信息。CGI是Web服務(wù)器運(yùn)行時(shí),調(diào)用外部應(yīng)用程序(即CGI程序)的規(guī)范,CGI規(guī)范允許Web服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給Web瀏覽器,CGI將Web的一組簡(jiǎn)單的靜態(tài)超媒體文檔變成一個(gè)完整的、新的交互式媒體,按照CGI編寫(xiě)的程序可以擴(kuò)展Web服務(wù)器功能。
出現(xiàn)背景:CGI是比較原始的開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站的方式。由于靜態(tài)的html頁(yè)面無(wú)法實(shí)現(xiàn)網(wǎng)站的動(dòng)態(tài)內(nèi)容的生成,所以就需要由web服務(wù)器調(diào)用CGI程序,CGI程序生成動(dòng)態(tài)內(nèi)容,返回給web服務(wù)器,web服務(wù)器再返回給瀏覽器。
CGI應(yīng)用程序能通過(guò)Web服務(wù)器與瀏覽器進(jìn)行交互,還可以通過(guò)數(shù)據(jù)庫(kù)API與數(shù)據(jù)庫(kù)服務(wù)器等外部數(shù)據(jù)源進(jìn)行通信,從數(shù)據(jù)庫(kù)服務(wù)器中獲取數(shù)據(jù),將數(shù)據(jù)格式化為HTML文檔后,發(fā)送給瀏覽器,也可以將從瀏覽器獲得的數(shù)據(jù)放到數(shù)據(jù)庫(kù)中。如下圖:
幾乎所有Web服務(wù)器都支持CGI,我們可用多種語(yǔ)言編寫(xiě)CGI(包括流行的C、C ++等),只要這種語(yǔ)言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量。
大多數(shù)的CGI程序被用來(lái)解釋處理來(lái)自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器,CGI程序使網(wǎng)頁(yè)具有了交互功能。
4.4CGI程序處理步驟
1. 瀏覽器通過(guò)HTML表單或超鏈接,請(qǐng)求指向一個(gè)CGI應(yīng)用程序的URL;
2. 服務(wù)器收到瀏覽器發(fā)送的請(qǐng)求;
3. 服務(wù)器調(diào)用執(zhí)行指定CGI應(yīng)用程序;
4. CGI應(yīng)用程序根據(jù)相關(guān)信息(通常是基于瀏覽者輸入的內(nèi)容),執(zhí)行具體的操作;
5. CGI應(yīng)用程序把操作結(jié)果格式化為網(wǎng)絡(luò)服務(wù)器和瀏覽器能夠理解的文檔(通常是HTML網(wǎng)頁(yè)),并發(fā)送給web服務(wù)器;
6. web服務(wù)器把操作結(jié)果返回給瀏覽器。
由于環(huán)境變量的大小是有一定限制的,當(dāng)需要傳送的數(shù)據(jù)量很大時(shí),環(huán)境變量的存儲(chǔ)空間可能會(huì)不足,造成傳輸數(shù)據(jù)接收不完全,甚至無(wú)法執(zhí)行 CGI 程序。因此,后來(lái)又發(fā)展出另外一種方法:POST,也就是利用 I/O 重新導(dǎo)向的技巧,讓 CGI 程序可以由 STDIN 和 STDOUT 直接跟瀏覽器溝通。當(dāng)我們指定用這種方法傳遞請(qǐng)求的數(shù)據(jù)時(shí), web 服務(wù)器收到數(shù)據(jù)后,會(huì)先將這些數(shù)據(jù)放在一塊輸入緩沖區(qū)中,并且將數(shù)據(jù)的大小記錄在 CONTENT_LENGTH 環(huán)境變量中,然后調(diào)用 CGI 程序并將 CGI 程序的 STDIN 指向這塊緩沖區(qū),于是我們就可以很順利的通過(guò) STDIN 和環(huán)境變量 CONTENT_LENGTH 得到服務(wù)器接收的信息,避免了對(duì)傳輸信息大小的限制。
4.5 CGI的優(yōu)缺點(diǎn)
CGI可以為我們提供許多HTML無(wú)法做到的功能,比如記數(shù)器、顧客信息表格的提交以及統(tǒng)計(jì)、搜索程序、WEB數(shù)據(jù)庫(kù)等。
用Html是沒(méi)有辦法記住客戶的任何信息的,要把客戶端的信息記錄在服務(wù)器的硬盤(pán)上,就要用到CGI,這是CGI最重要的作用,它補(bǔ)充了Html的不足,注意:僅僅是補(bǔ)充,不是替代。
CGI 使外部程序與 Web 服務(wù)器之間交互成為可能, CGI 程序運(yùn)行在獨(dú)立的進(jìn)程中,并對(duì)每個(gè) Web 請(qǐng)求建立一個(gè)進(jìn)程,這種方法非常容易實(shí)現(xiàn),但效率很差,難以擴(kuò)展。當(dāng)面對(duì)大量請(qǐng)求時(shí),進(jìn)程的大量建立和消亡會(huì)使操作系統(tǒng)性能大大下降,此外,由于地址空間無(wú)法共享,也限制了資源重用。
五、總結(jié)
由于 FastCGI 程序并不需要不斷產(chǎn)生新進(jìn)程,因此使用 FastCGI 可以大大降低Web服務(wù)器的壓力并產(chǎn)生較高的應(yīng)用效率。
CGI 就是所謂的短生存期應(yīng)用程序,而 FastCGI 就是所謂的長(zhǎng)生存期應(yīng)用程序, FastCGI 像是一個(gè)常駐(long-live)型的 CGI , FastCGI 可以一直執(zhí)行著,而不會(huì)每次花費(fèi)時(shí)間去fork(這也是 CGI 最為人詬病的 fork-and-execute 模式)。
首先恭喜您,能夠認(rèn)真的閱讀到這里,如果對(duì)部分理解不太明白,建議先將文章收藏起來(lái),然后對(duì)不清楚的知識(shí)點(diǎn)進(jìn)行查閱,然后在進(jìn)行閱讀,相應(yīng)你會(huì)有更深的認(rèn)知。如果您喜歡這篇文章,就點(diǎn)個(gè)贊或者【關(guān)注我】吧!!
總結(jié)
以上是生活随笔為你收集整理的html请求接口_通用网关接口-FastCGI介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python3编程实战_【python3
- 下一篇: tomcat catalina loca