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