ASP.NET Core Kestrel web sunucusu ile boşaltma isteği
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
HTTP bağlantılarını açmak zaman alır. HTTPS için de yoğun kaynak kullanır. Bu nedenle, Kestrel HTTP/1.1 protokolü başına bağlantıları yeniden oluşturmaya çalışır. Bağlantının yeniden kullanılmasına izin vermek için bir istek gövdesinin tamamen kullanılması gerekir. Uygulama her zaman sunucunun yeniden yönlendirme veya 404 yanıtı döndürdüğü HTTP POST istekleri gibi istek gövdesini kullanmaz. HTTP POST yeniden yönlendirme örneğinde:
- İstemci POST verilerinin bir bölümünü zaten göndermiş olabilir.
- Sunucu 301 yanıtını yazar.
- Önceki istek gövdesindeki POST verileri tamamen okunana kadar bağlantı yeni bir istek için kullanılamaz.
- Kestrel istek gövdesini boşaltmaya çalışır. İstek gövdesinin boşaltılması, verileri işlemeden okuma ve atma anlamına gelir.
Boşaltma işlemi, bağlantının yeniden kullanılmasına izin verme ile kalan verilerin boşaltılması için gereken süre arasında bir denge sağlar:
- Boşaltma beş saniyelik bir zaman aşımına sahiptir ve bu da yapılandırılamaz.
- veya
Transfer-Encoding
üst bilgisi tarafındanContent-Length
belirtilen tüm veriler zaman aşımından önce okunmamışsa, bağlantı kapatılır.
Bazen yanıtı yazmadan önce veya yazdıktan sonra isteği hemen sonlandırmak isteyebilirsiniz. Örneğin, istemcilerin kısıtlayıcı veri üst sınırı olabilir. Karşıya yüklenen verileri sınırlamak bir öncelik olabilir. Bu gibi durumlarda bir isteği sonlandırmak için bir denetleyiciden, Razor Sayfadan veya ara yazılımdan HttpContext.Abort'u çağırın.
çağrılması Abort
gereken uyarılar vardır:
- Yeni bağlantılar oluşturmak yavaş ve pahalı olabilir.
- bağlantı kapanmadan önce istemcinin yanıtı okuduğunun garantisi yoktur.
- Çağrı
Abort
nadir olmalı ve sık karşılaşılan hatalar için değil, ciddi hata durumları için ayrılmalıdır.- Yalnızca belirli bir sorunun çözülmesi gerektiğinde arayın
Abort
. Örneğin, kötü amaçlı istemciler POST verilerini deniyorsa veya istemci kodunda büyük veya çeşitli isteklere neden olan bir hata varsa çağırAbort
. - HTTP 404 (Bulunamadı) gibi yaygın hata durumlarını çağırmayın
Abort
.
- Yalnızca belirli bir sorunun çözülmesi gerektiğinde arayın
Çağrıdan önce HttpResponse.CompleteAsync çağrısı Abort
sunucunun yanıtı yazmayı tamamlamış olmasını sağlar. Ancak istemci davranışı tahmin edilebilir değildir ve bağlantı durdurulmadan önce yanıtı okumayabilir.
Protokol, bağlantıyı kapatmadan tek tek istek akışlarını durdurmayı desteklediğinden bu işlem HTTP/2 için farklıdır. Beş saniyelik boşaltma zaman aşımı geçerli değildir. Yanıt tamamlandıktan sonra okunmamış istek gövdesi verileri varsa, sunucu bir HTTP/2 RST çerçevesi gönderir. Ek istek gövdesi veri çerçeveleri yoksayılır.
Mümkünse, istemcilerin Expect: 100-continue istek üst bilgisini kullanması ve istek gövdesini göndermeye başlamadan önce sunucunun yanıt vermesini beklemesi daha iyidir. Bu, istemciye gereksiz verileri göndermeden önce yanıtı inceleme ve durdurma fırsatı verir.
ASP.NET Core