ASP.NET Core Web sunucusu uygulamasını HTTP.sys
Tom Dykstra ve Chris 'e göre
HTTP.sys , yalnızca Windows çalışan ASP.NET Core için bir web sunucusudur . HTTP.sys sunucuya bir alternatiftir Kestrel ve sağlamayan bazı özellikler sunar Kestrel .
Önemli
HTTP.sys ASP.NET Core modülüyle uyumlu değildir ve ııs veya IIS Express ile kullanılamaz.
HTTP.sys aşağıdaki özellikleri destekler:
- Windows Kimlik Doğrulaması
- Bağlantı noktası Paylaşımı
- SNı ile HTTPS
- TLS üzerinden HTTP/2 (Windows 10 veya üzeri)
- Doğrudan dosya iletimi
- Yanıtları Önbelleğe Alma
- WebSockets (Windows 8 veya üzeri)
desteklenen Windows sürümleri:
- Windows 7 veya üzeri
- Windows Server 2008 R2 veya sonraki sürümü
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Ne zaman kullanılacağı HTTP.sys
HTTP.sys, şu yerlerde olan dağıtımlar için yararlıdır:
Sunucuyu IIS kullanmadan doğrudan Internet 'e sunmaya gerek vardır.

İç dağıtım, içinde kullanılamayan bir özellik gerektirir Kestrel . Daha fazla bilgi için bkz Kestrel . vs. HTTP.sys

HTTP.sys, birçok saldırı türüne karşı koruyan ve tam özellikli bir Web sunucusu için sağlamlık, güvenlik ve ölçeklenebilirlik sağlayan çok sayıda teknolojiden oluşur. IIS, HTTP.sys en üstünde bir HTTP dinleyicisi olarak çalışır.
HTTP/2 desteği
aşağıdaki temel gereksinimler karşılandığında ASP.NET Core uygulamalar için HTTP/2 etkinleştirilir:
- Windows Server 2016/Windows 10 veya üzeri
- Uygulama katmanı protokol anlaşması (ALPN) bağlantısı
- TLS 1,2 veya üzeri bağlantı
Bir HTTP/2 bağlantısı kurulduysa, HttpRequest. Protocol Reports HTTP/2 .
HTTP/2 varsayılan olarak etkindir. HTTP/2 bağlantısı kurulmadıysa, bağlantı HTTP/1.1 'ye geri döner. Windows gelecek bir sürümünde http/2 yapılandırma bayrakları, HTTP.sys ile http/2 ' yi devre dışı bırakma özelliği de dahil olmak üzere kullanılabilir.
HTTP/3 desteği
aşağıdaki temel gereksinimler karşılandığında ASP.NET Core uygulamalar için HTTP/3 etkinleştirilir:
- Windows sunucu 2022/Windows 11 veya üzeri
- Bir
httpsURL bağlaması kullanılır. - EnableHttp3 kayıt defteri anahtarı ayarlanır.
önceki Windows 11 derleme sürümleri Windows ınsider derlemesinin kullanımını gerektirebilir.
HTTP/3, üst bilgi aracılığıyla http/1.1 veya HTTP/2 ' den yükseltme olarak keşfedilir alt-svc . Diğer bir deyişle, ilk isteğin HTTP/3 ' e geçmeden önce HTTP/1.1 veya HTTP/2 kullanması gerekir. Http.Sys otomatik olarak alt-svc üst bilgiyi eklemez, uygulama tarafından eklenmelidir. Aşağıdaki kod, yanıt üst bilgisini ekleyen bir ara yazılım örneğidir alt-svc .
app.Use((context, next) =>
{
context.Response.Headers.AltSvc = "h3=\":443\"";
return next(context);
});
Önceki kodu istek ardışık düzenine erken yerleştirin.
Http.Sys Ayrıca, HTTP/3 ' ün kullanılabilir olduğunu istemciye bildirmek için bir yanıt üst bilgisi yerine bir AltSvc HTTP/2 protokol iletisi göndermeyi destekler. Bkz. Enablealtsvc kayıt defteri anahtarı. Bunun için IP adresleri yerine ana bilgisayar adları kullanan Netsh sslcert bağlamaları gerekir.
Kerberos ile çekirdek modu kimlik doğrulaması
Kerberos kimlik doğrulama protokolü ile çekirdek modu kimlik doğrulamasına temsilciler HTTP.sys. Kullanıcı modu kimlik doğrulaması, Kerberos ve HTTP.sys desteklenmez. Makine hesabı, Active Directory alındığı ve kullanıcının kimliğini doğrulamak için istemci tarafından sunucuya iletilen Kerberos belirtecinin/biletinin şifresini çözmek için kullanılmalıdır. Uygulamanın kullanıcısına değil, ana bilgisayar için hizmet asıl adını (SPN) kaydedin.
HTTP.sys kullanma
ASP.NET Core uygulamasını kullanacak şekilde yapılandırma HTTP.sys
UseHttpSysAna bilgisayarı oluştururken, gerekli herhangi bir yöntemi belirterek uzantı yöntemini çağırın HttpSysOptions . Aşağıdaki örnek, seçeneklerini varsayılan değerlerine ayarlar:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseHttpSys(options =>
{
options.AllowSynchronousIO = false;
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://localhost:5005");
});
webBuilder.UseStartup<Startup>();
});
Ek HTTP.sys yapılandırması, kayıt defteri ayarlarıaracılığıyla işlenir.
HTTP.sys seçenekleri
| Özellik | Açıklama | Varsayılan |
|---|---|---|
| AllowSynchronousIO | Ve için zaman uyumlu giriş/çıkışa izin verilip verilmeyeceğini HttpContext.Request.Body denetleyin HttpContext.Response.Body . |
false |
| Authentication. AllowAnonymous | Anonim isteklere izin verin. | true |
| Authentication. düzenleri | İzin verilen kimlik doğrulama düzenlerini belirtin. Dinleyici elden atılırken önce herhangi bir zamanda değiştirilebilir. Değerler authenticationdüzenlerinin numaralandırmasıtarafından sağlanır: Basic ,,, Kerberos Negotiate None , ve NTLM . |
None |
| EnableResponseCaching | Uygun üst bilgileri içeren yanıtlar için çekirdek modu önbelleğe almayı deneyin. Yanıt Set-Cookie , Vary veya Pragma üst bilgileri içermeyebilir. Cache-Control public Bir ya da değeri ya da bir üst bilgi içermelidir shared-max-age max-age Expires . |
true |
| Http503Verbosity | Azaltma koşulları nedeniyle istekleri reddetmeden HTTP.sys davranışı. | Http503VerbosityLevel. Basit |
| MaxAccepts | En fazla eşzamanlı kabul sayısı. | 5 × ortam. ProcessorCount |
| MaxConnections | Kabul edilecek eşzamanlı bağlantı sayısı üst sınırı. -1Sonsuz için kullanın. nullKayıt defterinin makine genelindeki ayarını kullanmak için kullanın. |
null(makine genelinde ayarlanmasını |
| MaxRequestBodySize | MaxRequestBodySize bölümüne bakın. | 30000000 bayt (~ 28,6 MB) |
| RequestQueueLimit | Sıraya alınabilen en fazla istek sayısı. | 1000 |
RequestQueueMode |
Bu, sunucunun istek kuyruğunu oluşturma ve yapılandırmadan sorumlu olup olmadığını veya mevcut bir kuyruğa iliştirilmesinin gerekip gerekmediğini belirtir. Mevcut bir kuyruğa eklenirken, mevcut yapılandırma seçeneklerinin çoğu geçerli değildir. |
RequestQueueMode.Create |
RequestQueueName |
HTTP.sys istek kuyruğunun adı. | null (Anonim kuyruk) |
| ThrowWriteExceptions | İstemci bağlantısının kesilmesinden kaynaklanan yanıt gövdesi yazmasının, özel durumlar oluşturması veya normal şekilde tamamlanması gerektiğini belirtin. | false(normal olarak) |
| Timeouts | TimeoutManagerKayıt defterinde da yapılandırılabilen HTTP.sys yapılandırmasını kullanıma sunun. Varsayılan değerler de dahil olmak üzere her bir ayar hakkında daha fazla bilgi edinmek için API bağlantılarını izleyin:
|
|
| UrlPrefixes | Dosya kaydı UrlPrefixCollection için HTTP.sys. En kullanışlı UrlPrefixCollection.Add olan, koleksiyona bir ön ek eklemek için kullanılan 'tır. Bunlar, dinleyicinin atılamadan önce herhangi bir zamanda değiştirilebilir. |
MaxRequestBodySize
Herhangi bir istek gövdesinin bayt cinsinden izin verilen en büyük boyutu. olarak null ayarlanırsa, maksimum istek gövdesi boyutu sınırsızdır. Bu sınırın yükseltilen bağlantılar üzerinde hiçbir etkisi yoktur ve bu her zaman sınırsızdır.
Tek bir MVC uygulamasında ASP.NET Core geçersiz kılmak için önerilen IActionResult yöntem, özniteliğini bir RequestSizeLimitAttribute eylem yönteminde kullanmaktır:
[RequestSizeLimit(100000000)]
public IActionResult MyActionMethod()
Uygulama, isteği okumaya başladıktan sonra bir istekte sınırı yapılandırmaya çalışırsa bir özel durum oluşturur. Özelliğin salt okunur durumda olup olduğunu belirtmek için kullanılabilir, yani sınırı yapılandırmak için IsReadOnly MaxRequestBodySize çok geç.
Uygulamanın istek başına geçersiz MaxRequestBodySize k olması gerekirse, IHttpMaxRequestBodySizeFeature kullanın:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ILogger<Startup> logger, IServer server)
{
app.Use(async (context, next) =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>()
.MaxRequestBodySize = 10 * 1024;
var serverAddressesFeature =
app.ServerFeatures.Get<IServerAddressesFeature>();
var addresses = string.Join(", ", serverAddressesFeature?.Addresses);
logger.LogInformation("Addresses: {Addresses}", addresses);
await next.Invoke();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
Uygulama Visual Studio, uygulamanın IIS veya IIS Express çalıştıracak şekilde yapılandırılmamış olduğundan emin olun.
Bu Visual Studio, varsayılan başlatma profili IIS Express. Projeyi konsol uygulaması olarak çalıştırmak için, aşağıdaki ekran görüntüsinde gösterildiği gibi seçili profili el ile değiştirebilirsiniz:

Windows Server'Windows Yapılandırma
Uygulama için açılacak bağlantı noktalarını belirleyin ve Windows güvenlik duvarı bağlantı noktalarını açmak için Windows Firewall veya New-NetFirewallRule PowerShell cmdlet'ini kullanarak trafiğin HTTP.sys. Aşağıdaki komutlarda ve uygulama yapılandırmasında 443 bağlantı noktası kullanılır.
Azure VM'ye dağıtırken Ağ Güvenlik Grubu'nda bağlantı noktalarını açın. Aşağıdaki komutlarda ve uygulama yapılandırmasında 443 bağlantı noktası kullanılır.
Gerekirse X.509 sertifikalarını alın ve yükleyin.
Bu Windows New-SelfSignedCertificate PowerShell cmdlet'ini kullanarak otomatik olarak imzalanan sertifikalar oluşturun. Desteklenmeyen bir örnek için bkz. UpdateIISExpressSSLForChrome.ps1.
Sunucunun Yerel Makine Kişisel deposuna otomatik olarak imzalanan veya CA imzalı > sertifikalar yükleyin.
Uygulama çerçeveye bağımlı birdağıtımsa ,NET Core, .NET Framework veya her ikisini birden yükleyin (uygulama, uygulamayı hedef alan bir .NET Core .NET Framework).
- .NET Core: Uygulama .NET Core gerektiriyorsa .NET Core İndirmeleri'ne .NET Core Çalışma Zamanı yükleyicisini alın ve çalıştırın. Tam SDK'yı sunucuya yükleme.
- .NET Framework: Uygulama için gerekli .NET Framework yükleme kılavuzuna .NET Framework bakın. Gerekli bilgileri .NET Framework. En son sürüme .NET Framework .NET Core İndirmeleri sayfasından edinebilirsiniz.
Uygulama kendi içinde bir dağıtımsa, uygulamadağıtımında çalışma zamanı içerir. Sunucuda çerçeve yüklemesi gerekmez.
Uygulamanın URL'lerini ve bağlantı noktalarını yapılandırma.
Varsayılan olarak, ASP.NET Core'ye
http://localhost:5000bağlar. URL ön eklerini ve bağlantı noktalarını yapılandırmak için seçenekler şunlardır:- UseUrls
urlskomut satırı bağımsız değişkeniASPNETCORE_URLSortam değişkeni- UrlPrefixes
Aşağıdaki kod örneğinde, bağlantı noktası UrlPrefixes 443'te sunucunun yerel IP
10.0.0.4adresiyle nasıl kullanılır?public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseHttpSys(options => { options.UrlPrefixes.Add("https://10.0.0.4:443"); }); webBuilder.UseStartup<Startup>(); });Bunun bir
UrlPrefixesavantajı, hatalı biçimlendirilmiş ön ekler için bir hata iletisinin hemen üretilmelidir.Geçersiz kılma ayarlarında
UrlPrefixesUseUrls/urls/ASPNETCORE_URLSayarlar. Bu nedenle,UseUrls,urlsve ortamASPNETCORE_URLSdeğişkeninin bir avantajı, ile ortam değişkeni arasında geçiş Kestrel HTTP.sys.HTTP.sys HTTP Sunucusu API Url'siPrefix dize biçimlerini kullanır.
Uyarı
Üst düzey joker karakter bağlamaları (
http://*:80/http://+:80ve ) kullanılmamalı. Üst düzey joker karakter bağlamaları uygulama güvenlik açıkları oluşturabilir. Bu hem güçlü hem de zayıf joker karakterler için geçerlidir. Joker karakter yerine açık ana bilgisayar adları veya IP adresleri kullanın. Alt etki alanı joker karakter bağlaması (örneğin, ) üst etki alanının tamamını (güvenlik açığı olan yerine) denetim altına alırsanız bir güvenlik*.mysub.com*.comriski değildir. Daha fazla bilgi için bkz. RFC 7230: Bölüm 5.4: Konak.Sunucuda URL ön eklerini ön kaydı.
Yapılandırma için yerleşik araç HTTP.sys netsh.exe. netsh.exe URL ön eklerini ayırma ve X.509 sertifikalarını atama için kullanılır. Araç için yönetici ayrıcalıkları gerekir.
Uygulamanın netsh.exe kaydetmek içinnetsh.exearacını kullanın:
netsh http add urlacl url=<URL> user=<USER><URL>: Tam Tekdüz Kaynak Bulucu (URL). Joker karakter bağlaması kullanma. Geçerli bir ana bilgisayar adı veya yerel IP adresi kullanın. URL'nin sonda bir eğik çizgi içermesi gerekir.<USER>: Kullanıcı veya kullanıcı grubu adını belirtir.
Aşağıdaki örnekte, sunucunun yerel IP adresi
10.0.0.4şöyledir:netsh http add urlacl url=https://10.0.0.4:443/ user=UsersBir URL kayded olduğunda araç ile yanıt
URL reservation successfully addedverir.Kayıtlı bir URL'yi silmek için komutunu
delete urlaclkullanın:netsh http delete urlacl url=<URL>Sunucuya X.509 sertifikalarını kaydetme.
Uygulamanın netsh.exe kaydetmek içinnetsh.exearacını kullanın:
netsh http add sslcert ipport=<IP>:<PORT> certhash=<THUMBPRINT> appid="{<GUID>}"<IP>: Bağlama için yerel IP adresini belirtir. Joker karakter bağlaması kullanma. Geçerli bir IP adresi kullanın.<PORT>: Bağlama için bağlantı noktasını belirtir.<THUMBPRINT>: X.509 sertifika parmak izi.<GUID>: Uygulamayı bilgilendirme amacıyla temsil etmek için geliştirici tarafından oluşturulan GUID.
Başvuru amacıyla, GUID'i uygulamada paket etiketi olarak depolar:
- Şu Visual Studio:
- Uygulamanın proje özelliklerini açmak için uygulamanın proje özelliklerine sağ tıklayın ve Çözüm Gezgini'ı seçin.
- Paket sekmesini seçin.
- Etiketler alanına oluşturduğunuz GUID'i girin.
- Şu Visual Studio:
Uygulamanın proje dosyasını açın.
Oluşturduğunuz
<PackageTags>GUID değerine sahip yeni veya<PropertyGroup>var olan bir özele özellik ekleyin:<PropertyGroup> <PackageTags>9412ee86-c21b-4eb8-bd89-f650fbf44931</PackageTags> </PropertyGroup>
Aşağıdaki örnekte:
- Sunucunun yerel IP adresi:
10.0.0.4. - Çevrimiçi rastgele GUID oluşturucu değeri
appidsağlar.
netsh http add sslcert ipport=10.0.0.4:443 certhash=b66ee04419d4ee37464ab8785ff02449980eae10 appid="{9412ee86-c21b-4eb8-bd89-f650fbf44931}"Bir sertifika kaydediken araç ile yanıt
SSL Certificate successfully addedverir.Sertifika kaydını silmek için komutunu
delete sslcertkullanın:netsh http delete sslcert ipport=<IP>:<PORT>netsh.exe için başvuru belgeleri:
Uygulamayı çalıştırın.
1024'den büyük bir bağlantı noktası numarasıyla HTTP (HTTPS değil) kullanarak localhost'a bağlarken uygulamayı çalıştırmak için yönetici ayrıcalıkları gerekmez. Diğer yapılandırmalar için (örneğin, yerel bir IP adresi kullanarak veya bağlantı noktası 443'e bağlama kullanarak), uygulamayı yönetici ayrıcalıklarıyla çalıştırın.
Uygulama, sunucunun genel IP adresine yanıt verir. Bu örnekte, sunucuya İnternet'in genel IP adresi üzerinden
104.214.79.47ulaşıldı.Bu örnekte bir geliştirme sertifikası kullanılır. Tarayıcının güvenilmeyen sertifika uyarısı atlandıktan sonra sayfa güvenli bir şekilde yüklenir.

Proxy sunucusu ve yük dengeleyici senaryoları
İnternet'den veya HTTP.sys ağdan gelen isteklerle etkileşimde bulunarak barındırılan uygulamalar için ara sunucuların ve yük dengecilerin arkasında barındırıldıklarında ek yapılandırma gerekebilir. Daha fazla bilgi için bkz. ASP.NET Core sunucuları ve yük dengelerini çalışacak şekilde yapılandırma.
gRPC'yi desteklemek için gelişmiş HTTP/2 özellikleri
HTTP.sys'daki ek HTTP/2 özellikleri, yanıt tanıtımları ve sıfırlama çerçeveleri gönderme desteği de dahil olmak üzere gRPC'yi destekler.
gRPC'yi şu HTTP.sys:
- Windows 10, işletim sistemi derlemesi 19041.508 veya sonrası
- TLS 1.2 veya sonraki bir bağlantı
Römork
HTTP Trailer'lar HTTP Üst Bilgilerine benzer, ancak yanıt gövdesi gönderildikten sonra gönderilirler. IIS ve HTTP.sys, yalnızca HTTP/2 yanıt tanıtımları de destekler.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
Yukarıdaki örnek kodda:
SupportsTrailers, yanıt için tanıtımların desteklenesini sağlar.DeclareTrailerverilen tanıtım adını yanıt üstTrailerbilgisinde ekler. Yanıtın tanıtımları bildirilse de isteğe bağlıdır, ancak önerilir.DeclareTrailerçağrılırsa, yanıt üst bilgileri gönderilmeden önce olması gerekir.AppendTrailer, tanıtıma ekler.
Sıfırla
Sıfırlama, sunucunun belirtilen bir hata kodu ile HTTP/2 isteğini sıfırlamasına izin verir. Bir sıfırlama isteği durdurulan kabul edilir.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset Yukarıdaki kod örneğinde INTERNAL_ERROR hata kodu belirtilir. HTTP/2 hata kodları hakkında daha fazla bilgi için http/2 belirtim hata kodu bölümünüziyaret edin.
Ek kaynaklar
HTTP.sys, yalnızca ASP.NET Core çalışan bir web sunucusu Windows. HTTP.sys, sunucuya Kestrel alternatiftir ve sağ olmayan Kestrel bazı özellikler sunar.
Önemli
HTTP.sys, ASP.NET Core Modülü ile uyumlu değildir ve IIS veya IIS Express.
HTTP.sys aşağıdaki özellikleri destekler:
- Windows Kimlik Doğrulaması
- Bağlantı noktası paylaşımı
- SNI ile HTTPS
- TLS üzerinden HTTP/2 (Windows 10 veya sonrası)
- Doğrudan dosya iletimi
- Yanıtları Önbelleğe Alma
- WebSockets (Windows 8 veya sonrası)
Desteklenen Windows sürümleri:
- Windows 7 veya sonraki bir
- Windows Server 2008 R2 veya sonraki sürümü
Örnek kodu görüntüleme veya indirme ( nasılindir)
HTTP.sys ne zaman HTTP.sys
HTTP.sys, şu dağıtımlar için yararlıdır:
Sunucuyu IIS kullanmadan doğrudan İnternet'e ifşa etmek gerekir.

İç dağıtım, içinde mevcut bir özellik Kestrel gerektirir. Daha fazla bilgi için Kestrel bkz. HTTP.sys

HTTP.sys saldırı türlerine karşı koruma sağlayan ve tam özellikli bir web sunucusunun sağlamlığını, güvenliğini ve ölçeklenebilirliğini sağlayan olgun bir teknolojidir. IIS'nin kendisi, bir http dinleyicisi olarak HTTP.sys.
HTTP/2 desteği
Http/2, aşağıdaki ASP.NET Core karşılarsa uygulamalar için etkinleştirilmiştir:
- Windows Server 2016/Windows 10 veya sonraki bir
- Uygulama Katmanı Protokol Anlaşması (KATMANıN) bağlantısı
- TLS 1.2 veya sonraki bir bağlantı
Bir HTTP/2 bağlantısı kurulursa, HttpRequest.Protocol HTTP/2 raporları.
HTTP/2 varsayılan olarak etkindir. HTTP/2 bağlantısı kurulmamışsa bağlantı HTTP/1.1'e geri döner. Windows'nin gelecek bir yayında HTTP/2 yapılandırma bayrakları kullanılabilir olacak ve bu bayraklarla HTTP/2'yi devre dışı HTTP.sys.
Kerberos ile çekirdek modu kimlik doğrulaması
HTTP.sys kerberos kimlik doğrulama protokolü ile çekirdek modu kimlik doğrulamasına temsilciler verir. Kullanıcı modu kimlik doğrulaması Kerberos ve HTTP.sys. Makine hesabı, Active Directory'den alınan ve istemci tarafından kullanıcının kimliğini doğrulamak için sunucuya iletilen Kerberos belirtecinin/anahtarının şifresini çözmek için kullanılmalıdır. Uygulamanın kullanıcısı için değil, konak için Hizmet Asıl Adı'nın (SPN) kaydı.
HTTP.sys'i kullanma
ASP.NET Core uygulamasını HTTP.sys
Gerekli UseHttpSys herhangi bir belirterek ana bilgisayarı inşa sırasında genişletme yöntemini HttpSysOptions çağırma. Aşağıdaki örnek, seçenekleri varsayılan değerlerine ayarlar:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseHttpSys(options =>
{
options.AllowSynchronousIO = false;
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://localhost:5005");
});
webBuilder.UseStartup<Startup>();
});
Ek HTTP.sys yapılandırma, kayıt defteri ayarları aracılığıyla yapılandırmasını içerir.
HTTP.sys seçenekleri
| Özellik | Açıklama | Varsayılan |
|---|---|---|
| AllowSynchronousIO | ve için zaman uyumlu giriş/çıkışa izin verili olup olmadığını HttpContext.Request.Body HttpContext.Response.Body denetleme. |
false |
| Authentication.AllowAnonymous | Anonim isteklere izin ver. | true |
| Authentication.Schemes | İzin verilen kimlik doğrulama düzenlerini belirtin. Dinleyiciyi atarak önce herhangi bir zamanda değiştirilebilir. Değerler AuthenticationSchemes enum tarafından sağlanır: Basic , , , ve Kerberos Negotiate None NTLM . |
None |
| EnableResponseCaching | Uygun üst bilgilerle yanıtlar için çekirdek modu önbelleğini deneme. Yanıt , Set-Cookie veya Vary üst bilgilerini Pragma içermeyebilirsiniz. veya değeri Cache-Control veya üst bilgisi public olan bir üst bilgi shared-max-age max-age Expires içermesi gerekir. |
true |
| Http503Verbosity | Azaltma HTTP.sys istekleri reddederken bu davranışın etkili olması. | Http503VerbosityLevel. Temel |
| MaxAccepts | En fazla eşzamanlı kabul sayısı. | 5 × Ortam. ProcessorCount |
| MaxConnections | Kabul edilecek en fazla eş zamanlı bağlantı sayısı. Sonsuz -1 için kullanın. Kayıt null defterinin makine genelindeki ayarını kullanmak için kullanın. |
null(makine genelinde ayarı) |
| MaxRequestBodySize | MaxRequestBodySize bölümüne bakın. | 30000000 bayt (yaklaşık 28,6 MB) |
| RequestQueueLimit | Kuyruğa alınan en fazla istek sayısı. | 1000 |
RequestQueueMode |
Bu, sunucunun istek kuyruğu oluşturma ve yapılandırmadan mı yoksa var olan bir kuyruğa eklemeden mi sorumlu olduğunu gösterir. Mevcut bir kuyruğa ekleme sırasında mevcut yapılandırma seçeneklerinin çoğu geçerli değildir. |
RequestQueueMode.Create |
RequestQueueName |
İstek kuyruğu HTTP.sys adı. | null (Anonim kuyruk) |
| ThrowWriteExceptions | İstemci bağlantısının kesilmesi nedeniyle başarısız olan yanıt gövdesi yazma işleminin özel durumlar mı yoksa normal bir şekilde mi tamamlanması gerektiğini belirt. | false(normal şekilde tamamla) |
| Timeouts | Kayıt HTTP.sys TimeoutManager yapılandırılan yapılandırmayı da açığa çıkarma. Varsayılan değerler de dahil olmak üzere her ayar hakkında daha fazla bilgi edinmek için API bağlantılarını izleyin:
|
|
| UrlPrefixes | Kayıt için UrlPrefixCollection HTTP.sys. En kullanışlı UrlPrefixCollection.Add olan, koleksiyona bir ön ek eklemek için kullanılan 'tır. Bunlar, dinleyicinin atılamadan önce herhangi bir zamanda değiştirilebilir. |
MaxRequestBodySize
Herhangi bir istek gövdesinin bayt cinsinden izin verilen en büyük boyutu. olarak null ayarlanırsa, maksimum istek gövdesi boyutu sınırsızdır. Bu sınırın yükseltilen bağlantılar üzerinde hiçbir etkisi yoktur ve bu her zaman sınırsızdır.
Tek bir MVC uygulamasında ASP.NET Core geçersiz kılmak için önerilen IActionResult yöntem, özniteliğini bir RequestSizeLimitAttribute eylem yönteminde kullanmaktır:
[RequestSizeLimit(100000000)]
public IActionResult MyActionMethod()
Uygulama, isteği okumaya başladıktan sonra bir istekte sınırı yapılandırmaya çalışırsa bir özel durum oluşturur. Özelliğin salt okunur durumda olup olduğunu belirtmek için kullanılabilir, yani sınırı yapılandırmak için IsReadOnly MaxRequestBodySize çok geç.
Uygulamanın istek başına geçersiz MaxRequestBodySize k olması gerekirse, IHttpMaxRequestBodySizeFeature kullanın:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ILogger<Startup> logger, IServer server)
{
app.Use(async (context, next) =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>()
.MaxRequestBodySize = 10 * 1024;
var serverAddressesFeature =
app.ServerFeatures.Get<IServerAddressesFeature>();
var addresses = string.Join(", ", serverAddressesFeature?.Addresses);
logger.LogInformation("Addresses: {Addresses}", addresses);
await next.Invoke();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
Uygulama Visual Studio, uygulamanın IIS veya IIS Express çalıştıracak şekilde yapılandırılmamış olduğundan emin olun.
Bu Visual Studio, varsayılan başlatma profili IIS Express. Projeyi konsol uygulaması olarak çalıştırmak için, aşağıdaki ekran görüntüsinde gösterildiği gibi seçili profili el ile değiştirebilirsiniz:

Windows Sunucusu'Windows yapılandırma
Uygulama için açılacak bağlantı noktalarını belirleyin ve Windows güvenlik duvarı bağlantı noktalarını açmak için Windows Firewall veya New-NetFirewallRule PowerShell cmdlet'ini kullanarak trafiğin HTTP.sys. Aşağıdaki komutlarda ve uygulama yapılandırmasında 443 bağlantı noktası kullanılır.
Azure VM'ye dağıtırken Ağ Güvenlik Grubu'nda bağlantı noktalarını açın. Aşağıdaki komutlarda ve uygulama yapılandırmasında 443 bağlantı noktası kullanılır.
Gerekirse X.509 sertifikalarını alın ve yükleyin.
Bu Windows New-SelfSignedCertificate PowerShell cmdlet'ini kullanarak otomatik olarak imzalanan sertifikalar oluşturun. Desteklenmeyen bir örnek için bkz. UpdateIISExpressSSLForChrome.ps1.
Sunucunun Yerel Makine Kişisel deposuna otomatik olarak imzalanan veya CA imzalı > sertifikalar yükleyin.
Uygulama çerçeveye bağımlı birdağıtımsa , .NET Core, .NET Framework veya her ikisini de yükleyin (uygulama, uygulamayı hedef alan bir .NET Core uygulaması .NET Framework).
- .NET Core: Uygulama .NET Core gerektiriyorsa .NET Core İndirmeleri'ne .NET Core Çalışma Zamanı yükleyicisini alın ve çalıştırın. Tam SDK'yı sunucuya yükleme.
- .NET Framework: Uygulamanın yüklenmesi .NET Framework yükleme kılavuzuna .NET Framework bakın. Gerekli bilgileri .NET Framework. En son sürüme .NET Framework .NET Core İndirmeleri sayfasından edinebilirsiniz.
Uygulama kendi içinde bir dağıtımsa, uygulamadağıtımında çalışma zamanı içerir. Sunucuda çerçeve yüklemesi gerekmez.
Uygulamanın URL'lerini ve bağlantı noktalarını yapılandırma.
Varsayılan olarak, ASP.NET Core'ye
http://localhost:5000bağlar. URL ön eklerini ve bağlantı noktalarını yapılandırmak için seçenekler şunlardır:- UseUrls
urlskomut satırı bağımsız değişkeniASPNETCORE_URLSortam değişkeni- UrlPrefixes
Aşağıdaki kod örneğinde, bağlantı noktası UrlPrefixes 443'te sunucunun yerel IP
10.0.0.4adresiyle nasıl kullanılır?public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseHttpSys(options => { options.UrlPrefixes.Add("https://10.0.0.4:443"); }); webBuilder.UseStartup<Startup>(); });Bunun bir
UrlPrefixesavantajı, hatalı biçimlendirilmiş ön ekler için bir hata iletisinin hemen üretilmelidir.Geçersiz kılma ayarlarında
UrlPrefixesUseUrls/urls/ASPNETCORE_URLSayarlar. Bu nedenle,UseUrls,urlsve ortamASPNETCORE_URLSdeğişkeninin bir avantajı, ile ortam değişkeni arasında geçiş Kestrel HTTP.sys.HTTP.sys HTTP Sunucusu API UrlPrefix dize biçimlerini kullanır.
Uyarı
Üst düzey joker karakter bağlamaları (
http://*:80/http://+:80ve ) kullanılmamalı. Üst düzey joker karakter bağlamaları uygulama güvenlik açıkları oluşturabilir. Bu hem güçlü hem de zayıf joker karakterler için geçerlidir. Joker karakter yerine açık ana bilgisayar adları veya IP adresleri kullanın. Alt etki alanı joker karakter bağlaması (örneğin, ) üst etki alanının tamamını (güvenlik açığı olan yerine) denetim altına alırsanız bir güvenlik*.mysub.com*.comriski değildir. Daha fazla bilgi için bkz. RFC 7230: Bölüm 5.4: Konak.Sunucuda URL ön eklerini ön kaydı.
Yapılandırma için yerleşik araç HTTP.sys netsh.exe. netsh.exe URL ön eklerini ayırma ve X.509 sertifikalarını atama için kullanılır. Araç için yönetici ayrıcalıkları gerekir.
Uygulamanın netsh.exe kaydetmek içinnetsh.exearacını kullanın:
netsh http add urlacl url=<URL> user=<USER><URL>: Tam Tekdüz Kaynak Bulucu (URL). Joker karakter bağlaması kullanma. Geçerli bir ana bilgisayar adı veya yerel IP adresi kullanın. URL'nin sonda bir eğik çizgi içermesi gerekir.<USER>: Kullanıcı veya kullanıcı grubu adını belirtir.
Aşağıdaki örnekte, sunucunun yerel IP adresi
10.0.0.4şöyledir:netsh http add urlacl url=https://10.0.0.4:443/ user=UsersBir URL kayded olduğunda araç ile yanıt
URL reservation successfully addedverir.Kayıtlı bir URL'yi silmek için komutunu
delete urlaclkullanın:netsh http delete urlacl url=<URL>Sunucuya X.509 sertifikalarını kaydetme.
Uygulamaya netsh.exe kaydetmek içinnetsh.exearacını kullanın:
netsh http add sslcert ipport=<IP>:<PORT> certhash=<THUMBPRINT> appid="{<GUID>}"<IP>: Bağlama için yerel IP adresini belirtir. Joker karakter bağlaması kullanma. Geçerli bir IP adresi kullanın.<PORT>: Bağlama için bağlantı noktasını belirtir.<THUMBPRINT>: X.509 sertifika parmak izi.<GUID>: Uygulamayı bilgilendirme amacıyla temsil etmek için geliştirici tarafından oluşturulan GUID.
Başvuru amacıyla, GUID'i uygulamada paket etiketi olarak depolar:
- Şu Visual Studio:
- Uygulamanın proje özelliklerini açmak için uygulamanın proje özelliklerine sağ tıklayın ve Çözüm Gezgini'yi seçin.
- Paket sekmesini seçin.
- Etiketler alanına oluşturduğunuz GUID'i girin.
- Şu Visual Studio:
Uygulamanın proje dosyasını açın.
Oluşturduğunuz
<PackageTags>GUID değerine sahip yeni veya<PropertyGroup>var olan bir özele özellik ekleyin:<PropertyGroup> <PackageTags>9412ee86-c21b-4eb8-bd89-f650fbf44931</PackageTags> </PropertyGroup>
Aşağıdaki örnekte:
- Sunucunun yerel IP adresi:
10.0.0.4. - Çevrimiçi rastgele GUID oluşturucu değeri
appidsağlar.
netsh http add sslcert ipport=10.0.0.4:443 certhash=b66ee04419d4ee37464ab8785ff02449980eae10 appid="{9412ee86-c21b-4eb8-bd89-f650fbf44931}"Bir sertifika kaydediken araç ile yanıt
SSL Certificate successfully addedverir.Sertifika kaydını silmek için komutunu
delete sslcertkullanın:netsh http delete sslcert ipport=<IP>:<PORT>netsh.exe için başvuru belgeleri:
Uygulamayı çalıştırın.
1024'den büyük bir bağlantı noktası numarasıyla HTTP (HTTPS değil) kullanarak localhost'a bağlarken uygulamayı çalıştırmak için yönetici ayrıcalıkları gerekmez. Diğer yapılandırmalar için (örneğin, yerel bir IP adresi kullanarak veya bağlantı noktası 443'e bağlama kullanarak), uygulamayı yönetici ayrıcalıklarıyla çalıştırın.
Uygulama, sunucunun genel IP adresine yanıt verir. Bu örnekte, sunucuya İnternet'in genel IP adresi üzerinden
104.214.79.47ulaşıldı.Bu örnekte bir geliştirme sertifikası kullanılır. Tarayıcının güvenilmeyen sertifika uyarısı atlandıktan sonra sayfa güvenli bir şekilde yüklenir.

Proxy sunucusu ve yük dengeleyici senaryoları
İnternet'den veya HTTP.sys ağdan gelen isteklerle etkileşimde olan uygulamalar için ara sunucuların ve yük dengecilerin arkasında barındırıldıklarında ek yapılandırma gerekebilir. Daha fazla bilgi için bkz. ASP.NET Core sunucuları ve yük dengelerini çalışacak şekilde yapılandırma.
gRPC'yi desteklemek için gelişmiş HTTP/2 özellikleri
HTTP.sys'daki ek HTTP/2 özellikleri, yanıt tanıtımları ve sıfırlama çerçeveleri gönderme desteği de dahil olmak üzere gRPC'yi destekler.
gRPC'yi HTTP.sys:
- Windows 10, işletim sistemi derlemesi 19041.508 veya sonrası
- TLS 1.2 veya sonraki bir bağlantı
Römork
HTTP Trailer'lar HTTP Üst Bilgilerine benzer, ancak yanıt gövdesi gönderildikten sonra gönderilirler. IIS ve HTTP.sys, yalnızca HTTP/2 yanıt tanıtımları de destekler.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
Yukarıdaki örnek kodda:
SupportsTrailers, yanıt için tanıtımların desteklenesini sağlar.DeclareTrailerverilen tanıtım adını yanıt üstTrailerbilgisinde ekler. Yanıtın tanıtımları bildirilse de isteğe bağlıdır, ancak önerilir.DeclareTrailerçağrılırsa, yanıt üst bilgileri gönderilmeden önce olması gerekir.AppendTrailer, tanıtıma ekler.
Sıfırla
Sıfırlama, sunucunun belirtilen bir hata kodu ile HTTP/2 isteğini sıfırlamasına izin verir. Bir sıfırlama isteği durdurulan kabul edilir.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset Yukarıdaki kod örneğinde INTERNAL_ERROR hata kodu belirtilir. HTTP/2 hata kodları hakkında daha fazla bilgi için http/2 belirtim hata kodu bölümünüziyaret edin.