轉文:ASP.NET運行機制原理

來源:互聯網
上載者:User

ASP.NET運行機制原理

---瀏覽器與IIS的互動過程

一、瀏覽器和伺服器的互動原理

   ()、瀏覽器和伺服器互動的簡單描述:

1.通俗描述:我們平時通過瀏覽器來訪問網站,其實就相當於你通過瀏覽器去訪問一台電腦上訪問檔案一樣,只不過瀏覽器的訪問請求是由被訪問的電腦上的一個 WEB伺服器軟體來接收處理,它會分析接收到的請求資訊,從而按照請求資訊來找到伺服器電腦上的檔案,經過處理,最終將產生的內容發回到瀏覽器。

簡單的說就是:由瀏覽器產生一條“命令”,通過互連網發給另一台電腦的某個軟體(伺服器軟體);伺服器軟體接收到“命令”,就分析理解這個“命令”,然後按照“命令”找到伺服器電腦上的檔案,將檔案內容發送回瀏覽器。

2.通過,我們看到了瀏覽器和伺服器互動的簡單過程。現在,我們要想想,瀏覽器和伺服器軟體到底是神馬東東,他們之間又是如何互動資訊的呢?

其實,瀏覽器和伺服器軟體,就是兩個獨立的應用程式(就如qq、office、畫圖工具一樣)。那麼兩個應用程式之間要互動資訊,就牽扯到了應用程式通訊的問題。那他倆是使用神馬方式通訊的呢?

答案是通訊端:Socket。至於Socket的具體用法和原理,篇幅問題不在此文中寫了,先預留位置在這,下次補上《基於多線程和通訊端的簡易WebServer軟體-沒有控制項的ASP.NET

瀏覽器和伺服器軟體通過通訊端來發送和接收對方的資訊,但現在的關鍵問題是,他們發送和接收的到底是什麼?--- 基於Http協議的報文資料(詳見Http協議介紹---沒有控制項的ASP.NET

也就是說:瀏覽器和伺服器軟體其實就是兩個使用Socket進行通訊的的兩個應用程式:雙方都發送按照 Http協議文法規範組織的資料,接收到資料後都按照 Http協議文法規範來解釋。

 

()、瀏覽器和IIS(or other webserver)互動機制

就是IIS (伺服器軟體)

1.瀏覽器和IIS互動過程:

我們都知道,在互連網上確定一台電腦的位置是使用IP定址,但為什麼當我們平時訪問網站時直接輸入一個網域名稱也能夠訪問到某個伺服器電腦進而由對方的伺服器軟體發送響應頁面資料給我呢?下面我把簡單步驟列出:

(1)在瀏覽器輸入網址:www.oumind.com/index.html,瀏覽器按照Http協議文法 產生請求報文資料。

(2).瀏覽器檢查本機是否儲存了www.oumind.com/index.html. 網域名稱對應的伺服器IP地址。如果沒有,則發送請求到所在城市網中最近的DNS伺服器(網域名稱解析伺服器),它會根據我們發送來的網域名稱查詢到該網域名稱對應的伺服器IP地址,並發送回瀏覽器。

(3)瀏覽器從DNS伺服器獲得了 www.oumind.com/index.html網域名稱對應的伺服器電腦IP,則將 請求報文 通過Socket發送到伺服器電腦。(注意:Http協議 規定伺服器軟體使用的預設連接埠是80,通俗的說,就是如果瀏覽器訪問一個網站頁面,瀏覽器預設就是將 請求報文 發送到伺服器80連接埠,而伺服器負責監聽這個連接埠的軟體一般就是伺服器軟體—比如asp.net用的IIS,java用的Tomcat。)

(4)IIS接收到 請求報文,分析請求報文,從中擷取請求的頁面路徑 /index.html。判斷頁面的尾碼名,如果是靜態頁面(.html/.jpg/.css/.js等),則直接由IIS軟體的組件讀取該檔案內容,並將內容通過Socket發送回瀏覽器。

(5)但如果此時請求的是一個動態網頁面(.aspx/.ashx),IIS自己就處理不了 (因為IIS軟體開發出來的時候,ASP.NET程式還不存在呢) 。所以,IIS就去它的 擴充程式映射表 中根據被請求檔案尾碼名 查看是否有能夠處理這種檔案的擴充程式


而我們ASPNET中常用的檔案.aspx/.ashx等 對應的處理常式是aspnet_isapi.dll。如:

              (6)如果IIS根據尾碼名找到對應的處理常式,則通過調用此程式來處理瀏覽器發送來的請求報文。

至於,之後又進行了什麼操作,請繼續關註:

《ASP.NET運行機制原理02_ASP.NET整體運行機制01從瀏覽器到HttpApplication ---沒有控制項的ASP.NET》

轉載請註明出處:ASP.NET運行機制原理01---瀏覽器與IIS的互動過程 開智網 http://www.oumind.com

 

 

 

ASP.NET頁面運行機制以及請求處理流程

 

IIS自身是不能處理像ASPX擴 展名這樣的頁面,只能直接請求像HTML這樣的靜態檔案,之所以能處理ASPX這樣副檔名的頁面,是因為IIS有一個ISAPI過濾器,它是一個COM組 件。ASP.NET服務在註冊到IIS的時候,就會添加一個Win32的擴充動態庫aspnet_isapi.dll。並將擴充可以處理的頁面副檔名(如 ASPX)註冊到IIS裡面。擴充啟動後,就根據定義好的方式來處理IIS所不能處理的頁面。

當用戶端請求一個伺服器資源時,這個 HTTP請求會被inetinfo.exe進程截獲(www服務),然後Check請求資源的類型,並依據資源地圖資訊(儲存在IIS元庫中,一種IIS 專用的設定資料庫)將請求的資源分派給特定的處理常式模組。若請求的是靜態資源(img,text,html等)則由IIS處理(IIS在本地Web Server上訪問請求的檔案),將內容輸出到控制台,發出請求的瀏覽器就能接收到它了。若需要在伺服器端處理的請求,則會被傳到登入的擴充模組 中,aspx請求會被分配給aspnet_isapi.dll,讓這個程式開始處理代碼,產生標準的HTML代碼,然後將這些HTML加入到原有的 HTML中,最後把完整的HTML返回給IIS,IIS再把內容發送到客戶瀏覽器。

ASP.NET FrameWork對請求的處理:

上面說到IIS將像ASPX這樣的頁面分配給aspnet_isapi.dll,接著處理如下:

1、aspnet_isapi.dll則會 通過一個Http PipeLine的管道將這個Http請求發給w3wp.exe(iis 工作者進程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe),之後asp.net framework就會通過HttpRuntime來處理這個Http請求。

2、HttpRuntime首先會確定處理該請求的類名,HttpRuntime通過公用介面IHttpHandler來調用該類擷取被請求資源的類的執行個體。

3、調用HttpRuntime.ProcessRequest開始處理要發送到瀏覽器的頁面,具體說就是建立一個HttpContext執行個體,它封裝了所有與請求有關的http特有的資訊,並初始化一個Write對象用於快取標籤代碼。

4、HttpRuntime使用上下文資訊尋找或建立能處理該請求的WEB應用程式的對象。由HttpApplication Factory負責返回HttpApplication執行個體。

5、HttpApplication執行個體會讀取web.config中所有HttpModule的配置。

5、HttpApplication對象使用IHttpHandlerFactory類型的執行個體返回HttpHandler(http處理常式)給HttpRuntime對象。一個頁面只是個http處理常式對象。

6、最後由HttpRuntime對象調用IHttpHandler的頁面對象的ProcessRequest方法。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.