🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

(開賽)Http 請求 Asp.net IIS伺服器架構 (第1天)

Agenda

開賽前言:

三十篇文章架構基本遵循:

  1. **前言:**前情提要,閱讀此文建議使用工具或知識.
  2. 標出大主題(大字體+錨點)之後在細項列出要說明的細節
  3. 小結:每篇都有一個小結快速總結今天重點

為什麼想要選擇此主題

選擇這個主題主要原因是

  1. 沒有人整理一套較完整的Asp.net執行原始碼解析文章(從Http請求IIS Server,進入CLR前置動作),asp.net mvc原始碼解析
  2. 台灣大部分的文章都是分享如何使用,很少文章有介紹如何運作.
  3. 利用微軟開原後站在巨人肩膀上可以看更遠,理解MVC框架如何去設計具有一定的彈性.
  4. 了解核心運作流程,更好改善或擴充現有專案架構(讓系統變得更有條理)

閱讀時建議事項

我在文章中會盡量寫出我看到精華部分,但此系列文可能對於MVC新手不太容易閱讀,因為MVC框架中運用到許多設計模式和OOP觀念(當初我在閱讀上也花了不少功夫)

個人覺得OOP有很重要一個點是盡量用物件和物件關聯,資料狀態轉移來了解程式碼.

簡白來說就是物件關聯和關係

文章收穫

我希望大家在閱讀完所有文章後可以獲得

  1. Http對於IIS Server請求如何導向Asp.net MVC執行
  2. Asp.net MVC原始碼有基本了解和知道哪幾個重要類別,了解後能依照系統需要替換改寫.
  3. Asp.net MVC用到很多設計技巧(因為這是一個較大框架),希望大家能更了解設計模式如何運用在實戰中
  4. 閱讀第一個框架原始碼會花不少時間,了解一個大框架後在去看其他框架閱讀時間會越來越少

進入主題

Asp.net基於.NET Framework框架所提供,開發Web應用程式的類別庫,封裝在System.Web.dll檔案中,提供使用者開發網頁,ASP.NET運行在安裝了.NET Framework的IIS(Internet Information Services)伺服器上

微軟大大近幾年也投入Open Source行列讓我們可以更方便來窺探,Asp.net運作原理. 這個連結 Reference Source 可以查看微軟核心的DLL程式碼(這個網站是我們第一階段追code的好朋友)

Asp.net程式基本上是由IIS進行託管,介紹Asp.net MVC原始碼之前我們需要先了解Asp.netIIS關係.

瀏覽器請求IIS流程

Web基於Http協定,它是一個無狀態協定,每次請求都是新的且不會紀錄之前請求的東西
下圖我畫出一個對於IIS請求基本會跑的流程圖.

瀏覽器請求IIS流程

基本分為兩個區塊

  • 粉紅色是IIS Server領域
    • 會有一個Http.sys的程式在監聽所有Http請求並交由W3WP.exe並透過aspnet_isapi來此次請求是否為靜態檔案.
  • 藍色是.Net CLR領域由幾塊核心程式完成請求
    • ISAPIRunTime
    • HttpRuntime
    • HttpApplicationFactory
    • HttpApplication

之後會陸續介紹他們.

  1. 請求靜態檔案透過路徑找尋靜態檔案並回傳.
  2. 請求非靜態檔案透過.Net CLR執行返回結果.

如何辨別是否為靜態檔案?

如何辨別是否為靜態檔案,就需要談談HttpHandler的註冊表(後面有文章會說到)

基本上如果是請求Html,css,js…都會直接回傳不會在經過.Net CLR

.Net CLR Httpmodule & Httphandler 核心模組

Asp.net所有應用程式都離不開兩個核心模組Httpmodule & Httphandler且最終會找到一個繼承於IHttpHanlder物件來處理請求.

在網路上看到一個很好地比喻HttpModule & HttpHandler

Http請求像是一個旅客身上帶著行李拿著票來搭火車.

  • HttpHandler 是火車的終點站.
  • HttpModule 是火車中途停靠的各站.

這個比喻可以很清楚知道每個請求透過CLR就是要找到一個HttpHandler來執行.

圖片參考連結

圖片參考連結

W3WP應用程式

IIS在執行處理Http請求時工作管理員有一個w3wp應用程式在監聽.

此應用程式會依照aspnet_isapi模組來判斷此次請求是否走入.net CLR

w3wp.PNG

小結

今天我們了解到

  1. 瀏覽器請求IIS基本流程
  2. Asp.net核心模組Httpmodule & Httphandler
  3. IIS有一個Http.sys程式在監聽所有Http請求
  4. IIS透過一個w3wp.exe初步過濾判斷如何執行此請求.

瀏覽器發出Http請求給IIS,IIS透過Http.sys來監聽請求並交給w3wp.exe這個應用程式來判斷是否要交由.net託管處理此次請求.

下篇我們會來詳細講述Httpmodule & Httphandler

__此文作者__:Daniel Shih(石頭)
__此文地址__: https://isdaniel.github.io/Ithelp-day1/
__版權聲明__:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!

如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^