آَشنایی با وب سرور HTTP.sys در ASP.NET Core

HTTP.sys یک وب سرور بر پایه ویندوز برای ASP.NET Core است. این وب سرور یک نسخه دیگری از Kestrel Server است در این مقاله درباره ی ویژگی های آن صحبت خواهیم کرد.

آَشنایی با وب سرور HTTP.sys در ASP.NET Core

HTTP.sys ویژگیهایی دارد که توسط Kestrel  پشتیبانی نمیشوند. این وب‌ سرور بر پایه HTTP.sys Kernel-Mode Driver ساخته شده است. این وب سرور را نمیتوان با IIS یا IIS Express بکار برد زیرا با ماژول های ASP.Net ناسازگار است.

موارد زیر توسط HTTP.sys پشتیبانی میشوند:

احراز هویت ویندوز

کش کردن پاسخ (response caching)

وب سوکت‌ها ( WebSockets )

انتقال مستقیم فایلها

اشتراک گذاری پورت ها ( Port Sharing )

HTTPS با SNI ( نشانگر نام سرور )

HTTP/2 بر TLS ( امنیت لایه انتقال )

از ویندوز 7 و ویندوز سرور 2008 R2 و بالاتر پشتیبانی میکند.

این وب سرور برای گسترش و توسعه در جایی که نیاز داریم سرور را مستقیما و بدون IIS در اینترنت آشکار کنیم بسیار سودمند است. این وب سرور بر پایه HTTP.sys ساخته شده بنابراین به پراکسی سرور معکوس (reverse proxy server) برای محافظت در مقابل حملات نیازی ندارد.

HTTP.sys نیرومندی، امنیت و مقیاس پذیری را برای وب سرور مهیا میکند و تکنولوژی کاملی است که از وب سرور در مقابل هرگونه حمله ای محافظت میکند. این وب سرور هنگامی که ویژگیهای بکار رفته در احراز هویت ویندوز به نوعی از طریق سرور Kestrel در دسترس نیست، گزینه خوبی برای توسعه و گسترشات داخلی است.

پیکربندی ویندوز سرور

موارد زیر آیتمهای مورد نیاز برای پیکربندی این ویندوز سرور است.

نصب نسخه ای از.NET  فریم ورک که برنامه با آن کار میکند.

پیشوندهای URL پیش نویسی شده مورد نیاز برای بایند کردن HTTP.sys و نصب گواهی پروتکل لایه امن(SSL). اگر URL را مجددا بازنویسی(register) نکنیم، اپلیکیشن  را باید run as administrator کرد. برنامه ما تنها در صورتی میتواند بدون حق امتیاز administrator راه‌اندازی شود که به شبکه محلی ای وابسته باشد که از HTTP استفاده میکند و شماره پورتی بیشتر از 1024 دارد.

 ما باید پورتهای فایروال را باز کنیم تا بتوانیم به HTTP.sys دست یابیم.

پیکربندی برنامه ASP.net Core

گزینه های زیر مراحل پیکربندی برنامه ASP.NET برای HTTP.sys است.

بسته Microsoft.AspNetCore.Server.HttpSys برای وب سرور HTTP.sys مورد‌نیاز است، پس اگر از Microsoft.AspNetCore.All استفاده کنیم، نیازی به نصب بسته های دیگر نخواهیم داشت.

مرحله بعد پیکربندی سرور HTTP.sys است که با استفاده از extension method (اکستنشن متد) UseHttpSys  ازWebHostBuilder  در متد main  کلاس Program است. اینجا، میتوانیم گزینه‌های HTTP.sys را نیز معلوم کنیم.

    public class Program  
    {  
        public static void Main(string[] args)  
        {  
            BuildWebHost(args).Run();  
        }  
      
        public static IWebHost BuildWebHost(string[] args) =>  
            WebHost.CreateDefaultBuilder(args)  
                .UseStartup<Startup>()  
                .UseHttpSys(options =>  
                {  
                    options.Authentication.Schemes = AuthenticationSchemes.None;  
                    options.Authentication.AllowAnonymous = true;  
                    options.MaxConnections = 100;  
                    options.MaxRequestBodySize = 30000000;  
                    options.UrlPrefixes.Add("http://localhost:5000");  
                })  
                .Build();  
    }  

گزینه های HTTP.sys

حداکثر اتصالات کلاینت

حداکثر تعداد اتصالات TCP باز همزمان برای اپلیکیشن  با پراپرتی MaxConnections  مشخص می شود. اتصال میتواند نامحدود باشد، که در این صورت، پراپرتی آن NULL است.

حداکثر اندازه درخواست (Maximum request body size)

ما میتوانیم با استفاده از پراپرتی MaxRequestBodySize، مقدار حداکثر درخواست را override کنیم. مقدار پیش‌فرض برای حداکثر اندازه درخواست( Maximum request body size ) ، 30،000،000 بایت ( تقریبا 28.6 مگابایت ) است. همچنین میتوانیم بااستفاده از اتریبیوت ( RequestSizeLimit ) دربالای متد ، مقدار آن را override کنیم. عمل کردن به این شیوه توصیه شده است.

    [RequestSizeLimit(200000000)]  
    public IActionResult Index()  
    {  
        return View();  
    }  

پیکربندی URL ها و پورتهایی که فعال هستند

اپلیکیشن ASP.net core بطور پیش فرض به http://localhost:5000"" وابسته است. میتوان پورت پیشوندهای URL را بااستفاده از یکی از متد زیر پیکربندی کرد:

با استفاده از اکستنشن متد "UseUrl"

آرگومان خط فرمان URL ها

متغیر ASPNETCORE_URLS

پراپرتی UrlPrefixes  در HttpSysOptions

مزیت اصلی UrlPrefixes  این است که اگر بخواهیم پیشوندی به یک فرمت اشتباه اضافه کنیم، بلافاصله پیغام ارور دریافت میکنیم. مزیت اصلی متد " UseUrI " این است که راحتتر میتوانیم بین وب سرور HTTP.sys و وب سرور Kestrel جا به جا شویم.

احراز هویت

این پیکربندی های احراز هویت HTTP.sys را آشکار میکندکه دارای دو پراپرتی است:

Schemes:این پراپرتی نوع احراز هویت را معین می کند (none,basic,ntlm,…)

AllowAnonymous: اگر  به آن مقدار true  بدهید به کاربران ناشناس (annonymous) هم اجازه می دهد

برای تغییر مقدار این پراپرتی : قبل از dispose کردن listener ، هر موقعی که بخواهید می توانید مقدار آن را تغییر دهید

( MaxAccepts ): به حداکثر تعداد پذیرشات همزمان میگویند.

 ( EnableResonseCaching ): کش کردن kernel برای پاسخهایی با عنوانهای قابل‌ انتخاب را فعال می کند.

( RequestQueueLimit ): به کاربر اجازه (get/set)  حداکثر تعداد درخواستهایی که در سرور قرار میگیرند را میدهد.

 ( ThrowWriteExceptions ): اگر روی مقدار true  باشد ، هنگامی بدنه پاسخ  بخاطر قطع اتصال کلاینت شکست بخورد، یک exception پرتاب  میکند. مقدار پیش فرضش روی false است.

 ( Timeouts  ): این گزینه پیکربندی تایم اوت HTTP.sys را نمایش میدهد. قبل از dispose کردن listener ، هر موقعی که بخواهید می توانید مقدار آن را تغییر دهید.

هم HTTP.sys و هم IIS برای شنیدن و پردازش درخواستها بر پایه Kernel-Mode Driver هستنند. IIS راه آسانی برای پیکربندی برنامه‌های کاربردی‌ فراهم میکند در حالیکه در سرور HTTP.sys همه چیزهایی که نیاز داریم را باید خودمان پیکربندی کنیم. ابزار netsh.com میتواند به ما کمک کند تا HTTP.sys را پیکربندی کنیم. بااستفاده از این ابزار میتوانیم گواهینامه SSL  و پیشوندهای رزرو URL را اختصاص دهیم. برای راه‌اندازی این ابزار به حق‌امتیاز admin (run as admin) نیاز است.

بعضی ابزارهای شخص ثالث را میتوان برای پیکربندی سرور HTTP.sys بکار برد. این ابزارها توسط مایکروسافت عرضه نشده‌اند و به‌طور پیشفرض تحت مجوز مدیر(run as admin) اجرا میشوند.

maneger HTTP.sys

Manager HTTP.sys ، UI را برای پیکر بندی SSL ، Opstion ها ،  CTL، گزینه‌ها، ، رزرو و پیشوند فراهم میکند

HttpConfig

HttpConfig توانایی پیکربندی SSL و پیشوندهای URL را دارد. HttpConfig گزینه‌های بیشتری را نسبت به http.sys Manager ارائه میدهد. بااینکه نمیتواند CTL (Certificate Trust List) جدیدی ایجاد کند اما  می تواند به یک CTL موجود اختصاص یابد.

Lunch پروفایل پیشفرض در ویژوال استودیو، IIS Express است. برای راه‌اندازی اپلیکیشنی مثل یک کنسول اپلیکیشن ، باید بصورت دستی پروفایل انتخاب شده را تغییر دهیم یا با استفاده از CLI متناوبا پروژه‌ای را اجرا کنیم.

خلاصه

وب سرور Http.sys به همراه NET Core Framwork 2.0. معرفی شد. این وب سرور یک نسخه دیگری از سرور است که تنها در ویندوز اجرا میشود و آن را نمیتوان با IIS ،  IIS Expressبکار برد چون با ماژول های ASP.NET Core سازگار نیست.