国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

雜記 | 我看 CGI

王偉廷 / 1060人閱讀

摘要:腳本與服務(wù)器通信服務(wù)器與腳本通信是通過標(biāo)準(zhǔn)的輸入輸出和環(huán)境變量完成的。應(yīng)用程序執(zhí)行所需要的操作,通常是基于瀏覽者輸入的內(nèi)容。服務(wù)器把結(jié)果返回到瀏覽器中。當(dāng)用戶請(qǐng)求數(shù)量非常多時(shí),會(huì)大量擠占系統(tǒng)的資源如內(nèi)存,時(shí)間等,造成效能低下。

寫點(diǎn)舊東西,最近一直再看 django 源代碼,發(fā)現(xiàn)對(duì)運(yùn)行機(jī)制還是蠻感興趣的(太懶了,這塊一直沒有深入研究過),因?yàn)槌兜搅?wsgi 規(guī)范,就想到了原始的 cgi 接口規(guī)范, 這里就先寫寫我對(duì) cgi 接口規(guī)范 的認(rèn)知,同時(shí)也為了下次組內(nèi)分享預(yù)留個(gè)開頭。

1 遠(yuǎn)古時(shí)代

1991年8月6日,這是個(gè)偉大的日子,web 頁面首次在因特網(wǎng)上登場(chǎng),回去早期,web 服務(wù)器主要是用來共享靜態(tài)數(shù)據(jù),只是簡(jiǎn)單的響應(yīng)瀏覽器發(fā)來的 http 請(qǐng)求,并將存儲(chǔ)在服務(wù)器上的靜態(tài)文件返給瀏覽器。所以早期的 web 服務(wù)器的結(jié)構(gòu)如下:

因?yàn)樵缙诘挠脩糁挥懈叽笊系目茖W(xué)家,這樣的架構(gòu)無可厚非,畢竟只是為了共享自己的一些資料,方便交流。

2 CGI 時(shí)代

隨著時(shí)間的推移,互聯(lián)網(wǎng)逐漸平民化,技術(shù)在進(jìn)化,網(wǎng)站越來越復(fù)雜,遠(yuǎn)古時(shí)代的架構(gòu)已經(jīng)不能滿足用戶的需求。針對(duì)用戶強(qiáng)烈的動(dòng)態(tài)交互需求,另外一方面,服務(wù)器自己并不能運(yùn)行類似 python 腳本文件,既然服務(wù)器沒法做,只能聯(lián)合第三方一起搞,此時(shí)與第三方通信還是需要有個(gè)約定的,服務(wù)器給第三方參數(shù),第三方返回給服務(wù)器結(jié)果,最后服務(wù)器把結(jié)果返回給客戶端,此后名揚(yáng)江湖的 CGI(Common Gateway Interface) 誕生了。

CGI 定義了 Web服務(wù)器 與外部應(yīng)用程序之間的通信接口標(biāo)準(zhǔn),因此 Web服務(wù)器 可以通過 CGI 執(zhí)行外部程序,讓外部程序根據(jù)Web請(qǐng)求內(nèi)容生成動(dòng)態(tài)的內(nèi)容。Perl 因?yàn)榭绮僮飨到y(tǒng)和易于修改的特性成為 CGI 的主要編寫語言。當(dāng)然,CGI 可以用任何支持標(biāo)準(zhǔn)輸入輸出和環(huán)境變量的語言編寫,比如 Shell 腳本, C/C++ 語言,只要符合接口標(biāo)準(zhǔn)即可。比如你用C 語言編寫 CGI 程序,你把希望返回的 HTML 內(nèi)容通過 printf 輸出就可以發(fā)送給Web服務(wù)器,進(jìn)而返回給用戶。

CGI 腳本與服務(wù)器通信

服務(wù)器與 CGI 腳本通信是通過標(biāo)準(zhǔn)的輸入輸出和環(huán)境變量完成的。

CGI 腳本工作流程

瀏覽器通過HTML表單或超鏈接請(qǐng)求指向一個(gè) CGI 應(yīng)用程序的 URL

服務(wù)器收發(fā)到請(qǐng)求。

服務(wù)器執(zhí)行所指定的 CGI 應(yīng)用程序。

CGI 應(yīng)用程序執(zhí)行所需要的操作,通常是基于瀏覽者輸入的內(nèi)容。

CGI 應(yīng)用程序把結(jié)果格式化為網(wǎng)絡(luò)服務(wù)器和瀏覽器能夠理解的文檔(通常是 HTML網(wǎng)頁)。

web 服務(wù)器 把結(jié)果返回到瀏覽器中。

CGI 模式性能
CGI 的跨平臺(tái)性能極佳,幾乎可以在任何操作系統(tǒng)上實(shí)現(xiàn)。CGI 方式在遇到連接請(qǐng)求(用戶請(qǐng)求)先要?jiǎng)?chuàng)建 CGI 的子進(jìn)程,激活一個(gè) CGI 進(jìn)程,然后處理請(qǐng)求,處理完后結(jié)束這個(gè)子進(jìn)程。這就是 fork-and-execute 模式。所以用 CGI 方式的服務(wù)器有多少連接請(qǐng)求就會(huì)有多少 CGI 子進(jìn)程,子進(jìn)程反復(fù)加載是 CGI 性能低下的主要原因。當(dāng)用戶請(qǐng)求數(shù)量非常多時(shí),會(huì)大量擠占系統(tǒng)的資源如內(nèi)存,CPU 時(shí)間等,造成效能低下。

3 例子

web 服務(wù)器: lighttpd,腳本語言: python, 平臺(tái): mac

腳本代碼

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os

print "Content-Type: text/plain;charset=utf-8
"

print os.environ.get("SERVER_PROTOCOL")
print os.environ.get("QUERY_STRING")
print "Hello World!"

瀏覽器端

輸入 url 如下:

http://127.0.0.1:8080/cgi-bin/test.py?name=kycool&id=0989238423

返回結(jié)果:

HTTP/1.1
name=kycool&id=0989238423
Hello World!

debug 工具中打開

4 小結(jié)

通過例子就會(huì)發(fā)現(xiàn),運(yùn)行模式如下:

例子較為簡(jiǎn)單,復(fù)雜的業(yè)務(wù)如果寫完,估計(jì)自己可以造個(gè)框架輪子了,因?yàn)?CGI 性能低下的原因,python 相關(guān)的 wsgi 出現(xiàn)了......

參考文章
https://www.w3.org/CGI/
https://en.wikipedia.org/wiki/Common_Gateway_Interface
http://www.tianmaying.com/blog/8ab3eda84daf4e54014daf68ff09000b

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/45473.html

相關(guān)文章

  • marked.js使用雜記-markdown擴(kuò)展語法

    摘要:如何擴(kuò)展語法想要擴(kuò)展語法,也就需要深入了解的工作機(jī)制。的工作機(jī)制創(chuàng)建詞法解析器實(shí)例將字符串解析成是官方文檔的叫法,按照我的理解應(yīng)該是節(jié)點(diǎn)接下來創(chuàng)建解析器實(shí)例調(diào)用來解析,生成字符串到這里,的工作機(jī)制就完了。 請(qǐng)移步到我的Blog,獲得更好的閱讀體驗(yàn)!本文的鏈接請(qǐng)點(diǎn)這里 起因 我的博客系統(tǒng)的文章是直接使用gitbook保存的markdown文檔,后端使用marked.js來解析markd...

    huashiou 評(píng)論0 收藏0
  • 2018.12月問題整理雜記

    摘要:布局如下對(duì)于這塊,我不是很理解,后發(fā)現(xiàn),注銷這個(gè)樣式,用可以解決。后查閱一些資料,到了原因。 -12.24-:html布局如下: html css javascript vue css: tab{ width: 600px; margin: 0 auto; } .tab-tit{ width: 600px; font-si...

    wudengzan 評(píng)論0 收藏0
  • React-Router 雜記

    摘要:三種的區(qū)別即對(duì)應(yīng)中的值,如,服務(wù)器對(duì)任務(wù)都返回同一個(gè),具體的路徑由瀏覽器區(qū)分,因?yàn)闉g覽器不會(huì)發(fā)送后面的值給服務(wù)器。如果是即變成這樣,,所以要對(duì)服務(wù)器配置不同的返回不同的資源。就是沒有的情況,比如。 三種Router的區(qū)別 1. HashRouter: 即對(duì)應(yīng)url中的hash值,如xx.com/#/a、xx.com/#/a/b, 服務(wù)器對(duì)任務(wù)url都返回同一個(gè)url,具體的路徑由瀏覽器...

    keelii 評(píng)論0 收藏0
  • React-flux雜記

    摘要:簡(jiǎn)介是一種搭建客戶端的應(yīng)用架構(gòu),更像是一種模式而不是一個(gè)框架。 簡(jiǎn)介 Flux是一種搭建WEB客戶端的應(yīng)用架構(gòu),更像是一種模式而不是一個(gè)框架。 特點(diǎn) 單向數(shù)據(jù)流 showImg(https://segmentfault.com/img/remote/1460000018128072?w=1300&h=708); 與MVC的比較 1.傳統(tǒng)的MVC如下所示(是一個(gè)雙向數(shù)...

    王巖威 評(píng)論0 收藏0
  • JavaScript 雜記(一)

    摘要:基礎(chǔ)簡(jiǎn)單基礎(chǔ)數(shù)據(jù)類型值得注意的是的值是,表示一個(gè)空對(duì)象指針,沒有指向任何對(duì)象。的值是,表示申明變量或?qū)ο蟮膶傩詤s未初始化。值是派生自的,所以對(duì)他們執(zhí)行相等測(cè)試會(huì)返回。字符串單引號(hào)和雙引號(hào)都可以用來表示字符串,只要前后一致即可。 目的 記憶總是會(huì)隨著時(shí)間而淡化,學(xué)習(xí)了點(diǎn)什么,就記錄下點(diǎn)什么。 做點(diǎn)什么,總比不做要好。 基礎(chǔ) 簡(jiǎn)單(基礎(chǔ))數(shù)據(jù)類型 Number ...

    raise_yang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<