操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    擊上方?Java編程技術樂園,輕松關注!及時獲取有趣有料的技術文章

    文章很好,耐心閱讀,記得點贊和關注哦~



    前幾天和同事討論起CGI的性能、CGI為什么是一項落后的技術的時候,發現其實很多人對CGI等的網關技術并不熟悉。這里相信很多同學也都聽過CGI、fastCGI、WSGI等的詞語,但是應該很多同學都分辨不清它們的區別和聯系,本篇文章,就和大家一起探討這些技術的發展簡史。而本篇文章標題的GI,指的就是Gateway Interface(網關接口)的縮寫。

    了解網關接口之前,我們需要先弄清楚兩個東西,Web服務器和Web應用程序。什么是Web服務器?什么是Web應用程序?雖然在我的Django小程序課程里面,有對這兩者的區別展開來介紹,但是這里考慮到很多同學并沒有學習這門課,所以我們先把這兩個概念弄清楚,否則在后面討論起網關接口,也只會一知半解。

    Web服務器

    首先,什么是Web服務器。Web服務器是服務于網站后臺的一個軟件,是常駐于物理服務器的一個計算機程序。Web服務器可以向瀏覽器等Web客戶端提供文檔,也可以放置網站文件,讓全世界瀏覽;可以放置數據文件,讓全世界下載。目前最主流的三個Web服務器是Apache、 Nginx 、IIS。

    Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由于其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠并且可通過簡單的API擴充,將Perl/Python等解釋器編譯到服務器中。

    Nginx是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上Nginx的并發能力在同類型的網頁服務器中表現較好,中國大陸使用Nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

    這里先簡單討論一下Nginx和Apache的區別,在資源上,Nginx占用的內存更少;在性能上,Nginx的并發能力更強;在社區方面,Nginx和Apache都擁有廣泛的使用者,Apache的插件會比Nginx豐富一些。另外Nginx的功能比Apache要豐富一些,Nginx除了作為Web服務器以外,也經常作為反向代理服務器等使用,而Apache則主要作為Web服務器去使用。

    還有IIS,IIS是微軟公司在Windows Server提供的一個Web服務器,一般部署在Windows系統上,也有一定的使用者。

    Web應用程序

    了解了Web服務器,我們接著了解一下Web應用程序。

    Web應用程序一般指的是完成業務邏輯的程序,比如熟悉Python語言的,經常會用Django、Flask、Tornado等框架來完成業務邏輯的處理,接受請求,返回結果;熟悉Java語言的,則經常會使用Spring、Spring Boot來完成業務邏輯處理;熟悉PHP語言的,則常用ThinkPHP、Laravel、CI等等框架來完成Web后臺的開發;還有Golang、Node.js等等,都會有相應的框架來完成Web請求的處理。

    這些就是定義為Web應用程序的東西,也就是我們常說的Web框架,比如一個Pythoner問另外一個Pythoner,你一般使用什么Web框架呀?這個就是Web應用程序。

    那么Web服務器和Web應用程序有啥區別?其實在前面的描述里面,我已經說的比較清楚了,Web應用程序主要是完成業務邏輯的處理,Web服務器則主要是進行外部請求的接收和轉發。這里需要注意的是,我們一般不應該把業務邏輯放在Web服務器上去處理,雖然說Web服務器支持廣泛的腳本來進行拓展,但是我們一般情況下還是不應該把業務邏輯放在Web服務器去處理,比如攔截請求、鑒權處理等等的操作。

    看到這里可能有些人又會有疑問了,在開發Web應用的時候,我們直接就可以把應用跑起來接受請求了呀,為啥還需要Web服務器的存在。比如說使用Django的時候,直接輸入命令python manage.py runserver,就可以接收請求了,為啥還需要Web服務器呢。

    這主要是從性能上去考慮的,Web應用雖然在開發階段就可以通過一些命令來啟動服務,但是這些功能主要是提供調試所使用的,真正部署上線的時候,如果流量較大,性能是不行的,所以需要有Web服務器的存在。Web服務器是專門用于接收外部請求并處理的軟件,所以Web服務器在性能上會比Web應用更佳,畢竟術業有專攻。Web服務器處理靜態資源請求(CSS、JS、HTML、圖片)等,性能會比Web應用更好。另外對于一些非靜態資源的請求,則需要轉發到后臺Web應用。

    到這里,我們基本分清楚Web服務器和Web應用的區別了,這里面我們注意一個關鍵詞“轉發”,當Web服務器接受請求的時候,會把請求轉發到后臺Web應用去處理,我們本篇文章的主角,GI就工作在這個轉發的過程中。


    CGI

    終于輪到主角“網關接口”。前面介紹了GI工作的地方,接下來我們就來一起探討一下現在有哪些GI,他們有哪些特點和區別。

    首先是CGI,CGI是Common Gateway Interface (通用網關接口)的縮寫。CGI是一項古老的技術。最初是在1993年由美國國家超級電腦應用中心(NCSA)為NCSA HTTPd Web服務器開發的。CGI的原理非常簡單粗暴,在支持CGI的Web服務器下,只需要寫一個簡單的腳本,然后在腳本中輸出內容,這些內容就會返回給前臺。舉個簡單的例子,使用Python實現一個hello.py:

    #!/usr/bin/env python
    print 'Hello, World! Hello CGI.

    然后把他改名為hello.cgi,部署到Web服務器下,當請求到達的時候,打印的字符串就會通過Web服務器返回到頁面。我們常常稱這種應用為console application (也可以稱作command-line interface programs) 的程序,這樣的腳本稱為CGI腳本。

    CGI工作完整的原理是這樣的:

    1. 當用戶訪問我們的 Web 應用時,會發起一個 HTTP 請求。最終 Web 服務器接收到這個請求。
    2. Web 服務器創建一個新的 CGI 進程。在這個進程中,將 HTTP 請求數據已一定格式解析出來,并通過標準輸入和環境變量傳入到 URL 指定的 CGI 程序。
    3. Web 應用程序處理完成后將返回數據寫入到標準輸出中,Web 服務器進程則從標準輸出流中讀取到響應,并采用 HTTP 協議返回給用戶響應。

    一句話就是 Web 服務器中的 CGI 進程將接收到的 HTTP 請求數據讀取到環境變量中,通過標準輸入轉發給CGI程序;當CGI程序處理完成后,Web 服務器中的CGI進程從標準輸出中讀取返回數據,并轉換回 HTTP 響應消息格式,最終將頁面呈現給用戶。然后 Web 服務器關閉掉這個 CGI 進程。

    可以說 CGI 協議特別擅長處理 Web 服務器和 Web 應用的通信問題。然而,它有一個嚴重缺陷,對于每個請求都需要重新 fork 出一個 CGI 進程,處理完成后立即關閉。當請求量比較大時,會有嚴重的性能問題,因為頻繁的創建進程和回收進程,會占用非常多的服務器資源。因為CGI的性能問題,于是新一代的CGI技術,FastCGI應運而生。

    FastCGI

    快速通用網關接口(Fast Common Gateway Interface/FastCGI)是一種讓交互程序與Web服務器通信的協議。FastCGI是早期通用網關接口(CGI)的增強版本。

    FastCGI致力于減少網頁服務器與CGI程序之間交互的開銷,從而使服務器可以同時處理更多的網頁請求。

    而FastCGI的工作原理是這樣的:

    1. FastCGI 進程管理器啟動時會創建一個 主(Master) 進程和多個 CGI 解釋器進程(Worker 進程),然后等待 Web 服務器的連接。
    2. Web 服務器接收 HTTP 請求后,將 CGI 報文通過 套接字(UNIX 或 TCP Socket)進行通信,將環境變量和請求數據寫入標準輸入,轉發到 CGI 解釋器進程。
    3. CGI 解釋器進程完成處理后將標準輸出和錯誤信息從同一連接返回給 Web 服務器。
    4. CGI 解釋器進程等待下一個 HTTP 請求的到來。

    所以FastCGI可以看作是解決原始CGI性能問題的一個升級版本。

    WSGI

    WSGI:全稱是Web Server Gateway Interface,Web服務器網關接口,WSGI不是服務器,Python模塊,框架,API或者任何軟件,只是一種規范,描述前面Web服務器如何與Web應用通信的規范。

    前面介紹網關接口的時候介紹了CGI、FastCGI等,那這里的WSGI主要是Python為Web服務器和Web應用程序之間通信而設計的。在Python中,常見的Web框架Tornado、Django、Flask都支持使用WSGI和Web服務器進行通信,而在采用WSGI協議的時候,則常常安裝uWSGI模塊來完成通信。


    ASGI

    與WSGI類似的還有一個ASGI,ASGI也是由Python實現的一類網關接口,這里的A指的是Async,異步的意思。ASGI是WSGI的擴展,支持除了原來的HTTP以外的WebSocket等的網絡協議。

    Servlet、Tomcat

    終于來到Java陣營了,在前面的CGI、FastCGI、WSGI等等,主要都是PHP、C++、Python等語言實現Web應用程序和Web服務器通信的網關接口,尤其是CGI、FastCGI,在以前C++、PHP大行其道的時候,它們擁有廣泛的用戶基礎,像騰訊等大企業,由于歷史的關系,內部系統中還有很多保留著CGI、FastCGI等技術。那么在Java的陣營下,一般使用什么技術作為Web服務器和Web應用框架之間的通信呢?

    Servlet,談到Java不得不談的一項技術,全稱Server Applet,是用Java編寫的服務器端程序,可以看做是前面我們介紹的Web應用程序。其主要功能在于交互式地瀏覽和修改數據,生成動態Web內容。Servlet最初誕生在1997年,最新的一個版本Servlet4.0于2017年9月份推出,Servlet擁有廣泛的用戶群體。

    如果說Servlet是應用程序,那Servlet容器就是包含應用程序的Web服務器,常見的Servlet容器就有我們熟知的湯姆貓(Tomcat)、Jetty等,Servlet容器管理著Servlet應用,我們的Servlet程序一般通過Servlet容器對外進行服務。

    隨著Docker容器技術和K8S容器編排技術的成熟,今天微服務技術也是非常熱門,而微服務離不開的Spring Boot、Spring Cloud的其中,就有Servlet、Servlet容器的身影。

    我們說說Spring Boot,對于Spring Boot,大家都被他快捷的開發和部署方式所吸引,Spring Boot是由早期的Spring框架發展而來的,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。在我們開發使用Spring Boot開發Web后臺的時候,我們在寫完邏輯代碼的時候,在本地只需要點擊運行,就能通過瀏覽器進行調試,頗為方便;這和前面我們使用PHP、Python開發Web程序非常類似,我們在使用Flask、Tornado等框架開發Web程序的時候,也可以通過簡單的啟動,就可以在本地通過瀏覽器去調試。但是這里是有一些區別的,我們說Flask、Tornado等框架是Web應用框架,沒有說他們是Web服務器,他們通過前面介紹的網關接口(GI)通信,但是在使用Spring Boot的時候,卻很少說需要把它部署在Web服務器Apache、Nginx之下,一般部署Spring Boot應用的時候,我們直接把它打包成jar包,就可以在服務器跑起來對外服務了。這是為什么呢?

    其實Spring Boot內嵌了Servlet容器Tomcat,也就是Spring Boot既充當了Web應用程序的角色,也充當了Web服務器的角色,在開發Spring Boot應用程序的過程中,我們是先通過代碼實現了Web應用程序的邏輯,處理請求和應答,而Servlet容器的部分,完全不需要我們去配置,這就是Spring Boot簡單、便捷,高效的開發效率的原因,所以現在很多同學都喜歡使用Spring Boot去開發Web的后臺。Spring Boot提供了簡單的開發模式,但是也帶來一些問題,比如說很多同學根本無法分清楚Web應用程序和Web服務器的區別等等。

    最后簡單的回顧一下今天這篇文章,我們主要是介紹了現在Web后端各種網關接口,包括CGI、FastCGI、WSGI等,在理解這些之前,我們需要弄懂Web服務器和Web應用程序,而網關接口,就是主要工作在Web服務器和Web應用程序之間的。最后我們還介紹了Java陣營的技術,在Java現在大行其道的Spring Boot框架里面,我們不再特意強調Web服務器和Web應用程序,Spring Boot框架是把兩個融合在一起的一個框架,Spring Boot可以便捷的開發和部署Web程序,就是因為內部包含了一個叫Tomcat的Servlet容器,也就是Web服務器。

    最后希望這篇文章對大家捋清楚Web后臺技術和網關接口都能有一定的幫助

    來源:慕課網

    作者:咚咚嗆

    鏈接:http://www.imooc.com/article/298214

    出處:https://www.cnblogs.com/xuanyuan/p/12326610.html

    頭條號:大數據與云原生

    微信公眾號:大數據與云原生

    創作不易,在滿足創作共用版權協議的基礎上可以轉載,但請以超鏈接形式注明出處。

    為了方便閱讀,微信公眾號已按分類排版,后續的文章將在移動端首發,想學習云原生相關知識,請關注我

    廣告再臨

    “老周,有人找你”

    一大早,361殺毒公司的老周就被吵醒。

    今天的陽光很明媚,老周伸了伸懶腰,這才踱步走向工作室。

    “是誰一大早的就來吵吵,壞了我的瞌睡”,聽得出來,老周有點不太高興。

    “咚咚~”,老周微微抬頭一瞥,只見一甜美女子出現在工作室的門前。

    老周一下從座椅上彈了起來,三步并作兩步,走到女子面前,作出歡迎的手勢:“美女請進”

    二人坐罷,老周扶了下鏡框,又整理了一下格子襯衣,一副溫文爾雅的作態,輕聲問到:“不知美女到訪,所為何事?”

    女子倒是一副焦急的樣子,“您好,我是Chrome瀏覽器公司的小雪,最近我們訪問千度網、淘貝網的網頁中時常出現不少奇怪的廣告,一直被投訴,聽領導說361殺毒公司的周老師是這方面的專家,想請您幫忙診斷一下,到底這些廣告是怎么來的”

    老周聽得有些不好意思,連連揮手,“原來是小雪姑娘,哪里哪里,勇斗病毒木馬,消滅流氓軟件本就是我361公司的分內之事,在下也只是盡一些綿薄之力罷了”。

    “周老師別謙虛了,您之前揪出IE公司的木馬入侵的事跡已經傳遍整個Windows帝國了,大家都知道您的厲害。這一次廣告的問題,就拜托了”,小雪看著老周,彷佛眼里閃著星星。

    “別客氣,這事兒包在我身上了”小雪起身,連說了幾句謝謝就離開了。

    誰動了HTTPS流量

    此刻,負責網絡數據過濾的大白正在忙碌著,突然一只手搭在了他的肩膀上,大白回頭一看,正是老周。

    “老周,什么風把你吹到這里來了,你不在安全實驗室分析惡意代碼,跑我們網絡部門來干嘛?”

    老周拍了下大白的肩膀,說到:“大白啊,有點事想請你幫幫忙,你幫我瞅瞅,Chrome瀏覽器的流量中是不是被插入廣告了?”

    “就這事啊,前段時間發現路由器老給插入廣告,我就給做了特征屏蔽,原以為它們消停了,這才沒幾天又卷土重來了?”,大白說完調出了Chrome公司的流量,準備一看究竟。

    大白越看眉頭鎖的越緊,“應該沒有吧,我看訪問千度網和淘貝網都是用的HTTPS協議,按理說路由器沒有可能插入廣告了啊”

    “HTTPS協議?為什么用這個就沒法插入廣告?”,老周問到。

    “這都不知道啊,你這361公司安全實驗室領導怎么當上去的啊”,大白一臉無語的表情。

    老周有點難為情,“唉,老弟你也別取笑我了,這個術業有專攻嘛,我擅長病毒木馬代碼的分析,對網絡協議這塊確實知之甚少,勞煩大白老弟給說道說道”

    大白似乎是感覺自己的話說的有些重了,也借坡下坎,“老周啊,剛才我跟你開玩笑的,你可別往心里去啊”。

    “沒事沒事,你快給我說說這HTTPS協議,幫助我早點破案吧”“好嘞,你稍等啊”,說完,大白開始在白板上畫了起來。

    什么是HTTPS

    “HTTPS = HTTP + SSL/TLS,這門技術,說簡單也簡單,說復雜也復雜。簡單來說,就是為了網絡數據的安全性,通過加密傳輸的方式來對傳統上網的HTTP流量進行保護”,大白一邊畫著圖一邊給老周講述。

    “明白,那么問題來了,用什么加解密算法呢?對方如何知道用什么算法以及用什么密鑰解密呢?”,老周一下抓到了關鍵點。

    “唉,問到點子上了。在正式傳輸數據之前,雙方會有一個協商過程,為后面所選擇的加密算法,以及要使用的密鑰達成一致。”

    “那么問題又來了,這個協商的內容要是被別人知道了,他不就可以按圖索驥,解密傳輸的內容了嗎?”,老周的反應很快。

    “老周果然是老周!加密算法被知道是無所謂了,畢竟算法都是公開的,關鍵在于這個用于后續加密的密鑰,這個才是需要保護的關鍵,這個不能讓別人知道”,說罷,大白又繼續畫起來。


    “so?怎么保護這個密鑰呢?你倒是說啊”,老周有點著急了。

    “注意哦,高能來了,雙方使用一個叫非對稱加密的方式來傳輸...”

    "等一下",老周打斷了大白,“非對稱加密,這是個什么意思?”

    大白默默嘆了一口氣,“常見的加密方式叫對稱加密算法,所謂對稱,就是加密和解密使用同一個密鑰。那與此相對的,非對稱加密,就是說加密和解密使用的是不同的密鑰,明白了吧”

    老周略微思索,點了點頭,“我知道了,你繼續剛才說的,怎么用這個非對稱加密算法來傳輸后面需要的密鑰呢”

    大白繼續說到:“客戶端產生一個隨機數,使用公鑰加密,發給服務端,服務端使用私鑰解密取得這個隨機數,再根據這個隨機數和其他信息計算出一個key,就作為后續加密內容使用的密鑰了”

    “等等,客戶端的公鑰是哪里來的?”

    “最開始的時候,客戶端發來請求,服務端在響應中,會把公鑰告訴客戶端。好了,我畫完了,整個過程就是這樣的”,大白放下畫筆,一副完整的HTTPS協議握手過程圖浮現了出來:

    老周反復端詳,許久總算開口:“過程我倒是看懂了,不過我總感覺這不多此一舉嗎,直接使用非對稱加密算法不就得了,這么折騰”

    大白連連揮手,“你想的倒是簡單,非對稱加解密算法執行起來麻煩的多,耗費的時間會多很多倍,如果全程使用非對稱加密算法,那將會嚴重影響上網體驗。算法是個好算法,但用的代價也很大,所以權衡之下,好鋼用在刀刃上,就只用來傳輸密鑰,后面的正式數據傳輸,還是用常規的對稱加密算法,來的經濟劃算。”

    老周點了點頭,一會兒低頭思考,一會兒又抬頭看著流程圖。

    又過了許久,老周指著流程圖,再次提問:“我說大白,如果我在客戶端和服務端之間插入一個角色,對客戶端冒充服務端,對服務端又冒充客戶端,就能從中作梗,修改數據包,插入廣告了是吧?”


    正在喝水的大白聽后嗆得連連咳嗽,“你說的就是中間人攻擊嘛!你當HTTPS是玩具嘛,這么容易就被劫持,笑話!注意看圖,那里有個認證環節,不是誰都能冒充的”老周又看了看圖,“怎么認證法,我倒是聽聽”


    “在服務端的響應中,我前面說的公鑰是在一個叫證書的東西里面,這個證書就是用來標識服務端的身份的,是由權威機構頒發的,客戶端收到證書后,會檢查是否是可信任的,如果不受信任就會及時中止后面的流程。”

    “那如何判斷一個證書是可信任的呢?”“帝國早已把受信任的證書安裝好了,屆時只需調用API查一下即可”

    老周思來想去,總覺得哪里有問題,卻又說不上來。

    真相只有一個

    一連過了幾天,老周依舊毫無頭緒,這事兒就這樣擱置了。福無雙至,禍不單行。這案子還沒弄明白,firefox公司又出事了。原來,361殺毒公司檢測到firefox秘密啟動了有木馬特征的進程,老周再一次帶隊前往勘查,firefox公司的小狐負責對接此事。

    老周來到了firefox磁盤存儲目錄,打算先排查一下木馬文件是什么來頭。

    “這是一堆什么數據?”,老周指著一堆文件問到。

    “周老師,這是網頁緩存數據”,一旁的小狐回答。

    “打開看看,看看能否找到一些攻擊痕跡”

    老周環顧四周,指著另一堆文件問到:“這又是一堆什么數據?”

    “周老師,這是一堆證書信息,HTTPS握手時認證服務器所用的,跟這次攻擊事件應該沒關系的”,小狐繼續解釋到。

    “認證用?帝國不是存儲了受信認的證書嗎,你們還保存證書信息做什么?”,老周有些不解。

    “帝國存儲的受信任證書我們可不認,誰知道那里面都是些什么證書,太不可靠了,我們firefox瀏覽器公司自己做認證,不用那一套”,小狐言語之間流露著些許得意。

    聽完小狐的回答,老周突然愣住了,短暫的幾ms之后反應了過來,掏出了從Chrome公司拿來的千度網證書,打算請小狐看一下。

    小狐接過證書,仔細察看,片刻之后一口咬定的說:“這證書有問題!”老周眼前閃過一道亮光,追問到:“哪里有問題?”

    “這證書頒發機構叫ABSafe,不在我們受信任的列表中!再說了,我這里有緩存千度網的證書,根本不是這樣的,這肯定是假的,你看”

    老周拿著兩個證書反復查看,不時點點頭,之前困擾多時的問題終于有了答案。

    “我明白了,真相只有一個!一定是有人把這個ABSafe頒發機構安裝到了帝國受信任列表,以此騙過了Chrome公司!進行了HTTPS中間人劫持!YES!”,老周說完用力揮了揮拳頭。

    “周老師,您在說什么啊,我怎么聽不懂?”,看著老周自言自語,小狐滿臉的問號。

    老周叮囑同行的老齊繼續勘察,匆忙拜別小狐就離開了。

    這天夜里,兩個黑影出現在了帝國受信任根證書倉庫。

    “原來是有人把我們安裝的根證書給刪掉了,難怪剛才Chrome瀏覽器訪問千度網報了警告”,其中一個胖的黑影說到。

    瘦的黑影捂住了胖子的嘴巴,“噓,你給我把著點風,我去重新裝上”

    瘦的黑影躡手躡腳走了過去,從懷里掏出了一個東西。

    “別動!安全檢查!”,突然一束光線射了過來,原來老周帶著隊伍在此潛伏多時了。

    “竟然是你們,禁廣大師!千度網和淘貝網的廣告也是你們加的是吧?”,老周大聲質問。

    胖瘦黑影面面相覷,老實交代了一切。

    未完待續·······

    彩蛋

    “老齊,firefox公司的案子有什么發現嗎”

    “老周,你還是再來一趟吧,情況有點復雜”

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有