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

資訊專欄INFORMATION COLUMN

雜記 | 我看 CGI

王偉廷 / 1070人閱讀

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

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

1 遠(yuǎn)古時代

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

因為早期的用戶只有高大上的科學(xué)家,這樣的架構(gòu)無可厚非,畢竟只是為了共享自己的一些資料,方便交流。

2 CGI 時代

隨著時間的推移,互聯(lián)網(wǎng)逐漸平民化,技術(shù)在進(jìn)化,網(wǎng)站越來越復(fù)雜,遠(yuǎn)古時代的架構(gòu)已經(jīng)不能滿足用戶的需求。針對用戶強(qiáng)烈的動態(tài)交互需求,另外一方面,服務(wù)器自己并不能運(yùn)行類似 python 腳本文件,既然服務(wù)器沒法做,只能聯(lián)合第三方一起搞,此時與第三方通信還是需要有個約定的,服務(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請求內(nèi)容生成動態(tài)的內(nèi)容。Perl 因為跨操作系統(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表單或超鏈接請求指向一個 CGI 應(yīng)用程序的 URL

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

服務(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ǒng)上實現(xiàn)。CGI 方式在遇到連接請求(用戶請求)先要創(chuàng)建 CGI 的子進(jìn)程,激活一個 CGI 進(jìn)程,然后處理請求,處理完后結(jié)束這個子進(jìn)程。這就是 fork-and-execute 模式。所以用 CGI 方式的服務(wù)器有多少連接請求就會有多少 CGI 子進(jìn)程,子進(jìn)程反復(fù)加載是 CGI 性能低下的主要原因。當(dāng)用戶請求數(shù)量非常多時,會大量擠占系統(tǒng)的資源如內(nèi)存,CPU 時間等,造成效能低下。

3 例子

web 服務(wù)器: lighttpd,腳本語言: python, 平臺: 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é)

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

例子較為簡單,復(fù)雜的業(yè)務(wù)如果寫完,估計自己可以造個框架輪子了,因為 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

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

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

    huashiou 評論0 收藏0
  • 2018.12月問題整理雜記

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

    wudengzan 評論0 收藏0
  • React-Router 雜記

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

    keelii 評論0 收藏0
  • React-flux雜記

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

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

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

    raise_yang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<