ASP.NET溫故而知新學習系列之深度剖析ASP.NET架構—ASP.NET請求的處理過程(一)

       前言

  我爲什麼要寫這一系列呢,因爲只有瞭解運行機制,學好底層,對我們更深入的理解一定的問題有幫助。

  一:ASP.NET的工作原理

  我們根據下面這張圖來說明ASP.NET是如何來工作的

  1.1 客戶請求Web頁

  我們知道ASP.NET是B/S結構,也就是服務器和瀏覽器這樣一個結構,服務器可以有一臺或者多臺,對於瀏覽器可以有無數個,每個客戶是通過瀏覽器來訪問服務器的,所以第一步是客戶請求Web頁。

  1.2 Web服務器尋找指令文件

  於是這個指令就通過瀏覽器被髮送到服務器上比如:http://www.menglin/test.apx,在服務器上開始尋找指令文件,在我們這裏是尋找.aspx文件,如果服務器上沒有裝.Framework,對於.aspx文件服務器就不知道如何處理了。如果服務器已經裝了.Framework,就會找這個指令。

  1.3 ASP.NET代碼發送給公共語言運行時進行編譯

  這個指令是誰來處理的呢?是aspnet_isapi.dll這個動態鏈接庫來處理的,可以說在ASP.NET中所有的.aspx文件都是被aspnet_isapi.dll它來處理的,它的作用就是把.aspx文件發送給公共語言運行時進行編譯,也就是發送給.Framework裏面的公共語言運行時CLR進行編譯。

  1.4 HTML流返回給瀏覽器

  編譯完了以後,把HTML流返回給瀏覽器。

  1.5 瀏覽器處理HTML流並顯示頁面

  瀏覽器解釋HTML流,並顯示頁面。

  可以看出Web服務器處理的過程就是調用aspnet_isapi.dll處理aspx文件的過程,處理的結果就是一個HTML靜態頁面。

   

  二:ASP.NET頁面的執行流程

  2.1 每個.aspx文件實際上是繼承page類的,在運行的過程中它從一個類變成了一個對象,這是一個實例化的過程。

  2.2 把類轉化爲一個對象以後呢,被CLR轉化爲HTML,發送給aspnet_iaapi.dll。

  2.3 aspnet_iaapi.dll然後和IIS交互,把HTML發送給IIS。

  2.4 IIS把HTML返回給瀏覽器。

  

  三:ISAPI

   我們前面好幾次講到aspnet_iaapi.dll,到底aspnet_iaapi.dll是個什麼東西呢?

  在互聯網開始時候,基本上Intent都是靜態頁面,靜態頁面是以.HTML文件爲代表的,但是隨着需求的發展,靜態頁面已經滿足不了需求了,這時候開發者就需要擴展Web服務器的功能,這時候不同的Web服務器廠商都遵循了同一個主題“向Web服務器插入某些組件”,也就是說這在極大程度上豐富了Web服務器,對於Web服務器來說它可以進行功能的擴充,是通過加組件的方式,調用組件來實現一些功能的。所有的Web服務器都允許開發者自己來插入一些組件來增強Web服務器的功能,微軟提出了ISAPI(全稱是Intent Server API),所以到這裏明白了,提供了一種技術,這種技術讓開發者向Web服務器插入一些組件來擴充Web服務器的功能。

  ISASP經常用兩個手段實現。

  3.1 ISAPI擴展

   ISAPI擴展是使用Win32動態鏈接庫來實現的,我們之前提到的aspnet_iaapi.dll就是這種方式,這種擴展是通過dll來實現的。

  3.2 ISAPI過濾器

  客戶端每次向服務器發送請求都要經過濾器的,客戶端不需要在請求中指定過濾器,只需要把請求發送給Web服務器,Web服務器把請求傳遞給相關的過濾器,過濾器可能修改請求,執行某些操作。

  四:ASP.NET請求的處理過程

  ASP.NET請求的處理過程是基於管道模型的,在模型中ASP.NET把HTTP請求傳遞給管道中的所有模塊,每個模塊都接收HTTP請求並擁有完全控制權,模塊可以用自認爲合適的方式來處理請求,一旦HTTP請求經過所有HTTP模塊,最終被HTTP處理程序所處理,HTTP處理程序隊請求做一些處理,並且結果將再次經過管道中的HTTP模塊。類似一個管道似的。

  

  

  

每天學習一點點,每天進步一點點 用文字記錄工作,用文字記錄人生
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章