配置 ASP.NET HTTP 運(yùn)行時(shí)設(shè)置,以確定如何處理對(duì) ASP.NET 應(yīng)用程序的請(qǐng)求,配置節(jié)及其描述如下所示。
<httpruntime< p="">
executionTimeout="110"-------------------------- 指定在被 ASP.NET 自動(dòng)關(guān)閉前,允許執(zhí)行請(qǐng)求的最大秒數(shù)
maxRequestLength="4096"-------------------------- 指定輸入流緩沖閾值限制(以 KB 為單位)。此限制可用于防止拒絕服務(wù)攻擊;例如,因用戶向服務(wù)器發(fā)送大型文件而導(dǎo)致的拒絕服務(wù)攻擊。
requestLengthDiskThreshold="256"-------------------------- 定輸入流緩沖閾值限制(以字節(jié)為單位)。該值不應(yīng)超過 maxRequestLength 屬性。
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"-------------------------- 請(qǐng)求時(shí)空閑時(shí)最小線程數(shù)
minLocalRequestFreeThreads="4"-------------------------- 本地請(qǐng)求時(shí)最小的空閑線程數(shù)
appRequestQueueLimit="5000"-------------------------- 指定 ASP.NET 將為應(yīng)用程序排隊(duì)的請(qǐng)求的最大數(shù)目。當(dāng)沒有足夠的自由線程來(lái)處理請(qǐng)求時(shí),將對(duì)請(qǐng)求進(jìn)行排隊(duì)。當(dāng)隊(duì)列超出了該屬性中指定的限制時(shí),將通過" 503 - 服務(wù)器太忙"錯(cuò)誤信息拒絕傳入的請(qǐng)求。
enableKernelOutputCache="true"-------------------------- 啟用輸出緩存 IIS6 以后版本生效
enableVersionHeader="true"-------------------------- 是否在頭部輸出版本
requireRootedSaveAsPath="true"-------------------------- 指定 SaveAs 方法中的 filename 參數(shù)是否必須為絕對(duì)路徑。 ASP.NET 進(jìn)程必須具有在指定位置中創(chuàng)建文件的權(quán)限。
enable="true"-------------------------- 相當(dāng)于關(guān)閉應(yīng)用程序(連靜態(tài)頁(yè)面也無(wú)法訪問)指定是否在當(dāng)前的節(jié)點(diǎn)及子節(jié)點(diǎn)級(jí)別啟用應(yīng)用程序域 (AppDomain) ,以接受傳入的請(qǐng)求。如果為 False ,則實(shí)際上關(guān)閉了該應(yīng)用程序
shutdownTimeout="90"-------------------------- 關(guān)閉超時(shí)單位 秒 指定允許輔助進(jìn)程關(guān)閉的分鐘數(shù)。在達(dá)到該超時(shí)時(shí)間時(shí), ASP.NET 關(guān)閉輔助進(jìn)程。
delayNotificationTimeout="5"-------------------------- 延遲通知超時(shí)時(shí)間 秒為單位
waitChangeNotification="0"-------------------------- 等待變更通知
maxWaitChangeNotification="0"-------------------------- 最大等待變更通知數(shù)
requestPriority="Normal"-------------------------- 請(qǐng)求策略
enableHeaderChecking="true"-------------------------- 啟用頭部檢查 以檢測(cè)可能的注入式攻擊。如果檢測(cè)到攻擊, ASP.NET 將返回錯(cuò)誤作為響應(yīng)。
sendCacheControlHeader="true"-------------------------- 指定是否發(fā)送默認(rèn)情況下設(shè)置為Private 的緩存控制標(biāo)頭。如果為 True ,則客戶端緩存被禁用。
apartmentThreading="false"----------- 啟用單元線程處理以實(shí)現(xiàn)傳統(tǒng)的 ASP 兼容性。
/>
從上面的特性而言大概概括成 HttRuntime 的自身運(yùn)行方面(包括重啟時(shí)間,線程數(shù)控制,請(qǐng)求隊(duì)列),請(qǐng)求頭限制響應(yīng)輸出。
而HttpRuntime還涉及到其他方面,如Http管道,IIS的運(yùn)行模型。有其他博文從代碼角度列舉了從一個(gè)請(qǐng)求到達(dá)后,在AppDomain中創(chuàng)建HttpRuntime,HttpContext,HttpApplication,各個(gè)HttpModule,到HttpHandler處理。
舍長(zhǎng)的《 深入理解 ASP.NET 的內(nèi)部運(yùn)行機(jī)制 》
此外之前在看Http管道時(shí)一直沒仔細(xì)去搞清楚IIS的處理模型,在此也補(bǔ)一補(bǔ)。IIS到我現(xiàn)在看為止已經(jīng)到了7.0的版本,網(wǎng)上有不少資料從5.0開始說(shuō)起,既然如此就從5.0說(shuō)起,看看其變遷。
以下圖片均摘自蔣金楠老是的著作《ASP.NET MVC 4 框架揭秘》
IIS5處理模型

IIS 5.x 運(yùn)行在進(jìn)程 InetInfo.exe 中,該進(jìn)程寄宿著一個(gè)名為 World Wide Web Publishing Service (簡(jiǎn)稱 W3SVC )的 Windows 服務(wù)。 W3SVC 的主要功能包括 HTTP 請(qǐng)求的監(jiān)聽、工作進(jìn)程和配置管理(通過從 Metabase 中加載相關(guān)配置信息)等。
如果我們請(qǐng)求的是一個(gè)基于 ASP.NET 的資源類型,比如 .aspx 、 .asmx 和 .svc等, aspnet_isapi.dll 會(huì)被加載,而 ASP.NET ISAPI 擴(kuò)展會(huì)創(chuàng)建 ASP.NET 的工作進(jìn)程(如果該進(jìn)程尚未啟動(dòng))。對(duì)于 IIS 5.x 來(lái)說(shuō),該工作進(jìn)程為 aspnet.exe 。 IIS 進(jìn)程與工作進(jìn)程之間通過命名管道( Named Pipes )進(jìn)行通信。
在工作進(jìn)程初始化過程中, .NET 運(yùn)行時(shí)( CLR )被加載進(jìn)而構(gòu)建了一個(gè)托管的環(huán)境。對(duì)于某個(gè) Web 應(yīng)用的初次請(qǐng)求, CLR 會(huì)為其創(chuàng)建一個(gè)應(yīng)用程序域( Application Domain )。在應(yīng)用程序域中, HTTP 運(yùn)行時(shí)( HTTP Runtime )被加載并用以創(chuàng)建相應(yīng)的應(yīng)用。寄宿于 IIS 5.x 的所有 Web 應(yīng)用都運(yùn)行在同一個(gè)進(jìn)程(工作進(jìn)程 aspnet_wp.exe )的不同應(yīng)用程序域中。