ويشكل الطلب الأساسي وخطوط الأساس للاستجابة في إطار الشبكة العمود الفقري لكل تطبيق شبكي يستند إلى هذا الإطار.
إن فهم كيفية تدفق الطلب من خلال تطبيقاتك وكيفية توليد الاستجابات أمر بالغ الأهمية لبناء تطبيقات شبكية تتسم بالكفاءة والصيانة والأمان.
هذه السلسلة سوف ترشدكم خلال كل طبقة من خط الأنابيب، من اللحظة التي يصل فيها طلب HTTP في خادمكم إلى وقت إرسال الرد إلى العميل.
من خلال فهمها بعمق، سوف تكون قادرا على تحسين الأداء، تنفيذ الشواغل الشاملة بشكل أنيق، وقضايا حل المشاكل بشكل أكثر فعالية.
ملاحظة: هذا جزء من تجاربي مع منظمة العفو الدولية/طريقة لإنفاق 1000 دولار من ائتمانات "كلوود" على شبكة الإنترنت.**لقد أطعمت هذه مجموعة من الأوراق، فهمي، أسئلة كان عليّ أن ألفت هذه المقالة.**إنه ممتع ويملأ فجوة لم أرها ملأت في أي مكان آخر
قبل تمريره إلى المكون التالي
flowchart TB
OS[Operating System and Network TCP IP Socket Layer]
Kestrel[Kestrel Web Server HTTP11 HTTP2 HTTP3 QUIC TLS SSL Termination Connection Management]
Host[Host Layer Application Lifetime Dependency Injection Configuration Logging]
subgraph Middleware_Pipeline [Middleware Pipeline]
EH[Exception Handler Middleware catches exceptions]
HTTPS[HTTPS Redirection Middleware redirects HTTP to HTTPS]
Static[Static Files Middleware serves static content]
Routing[Routing Middleware matches request to endpoint]
AuthN[Authentication Middleware validates identity]
AuthZ[Authorization Middleware validates permissions]
Custom[Custom Middleware app specific logic]
EndpointMW[Endpoint Middleware executes matched endpoint]
end
EndpointExec[Endpoint Execution MVC Controllers and Actions Razor Pages Minimal APIs gRPC SignalR]
Response[Response Generation flows back through middleware]
BackKestrel[Back to Kestrel]
Client[Back to Client]
OS --> Kestrel --> Host --> EH --> HTTPS --> Static --> Routing --> AuthN --> AuthZ --> Custom --> EndpointMW --> EndpointExec --> Response --> BackKestrel --> Client
عن طريق تقديم رد فوري
بعد تنفيذ العنصر التالي
دعونا نتصور كامل بنية خط الأنابيب في ASP.net or 8:
HttpContextالشبكة)٢( A.
-
إنشاء
HttpContextيُبيّن مدة صلاحية التطبيق
هنا حيث يبدأ منطق تطبيقك
الـ
sequenceDiagram
autonumber
participant Client
participant OS as OS/Network
participant Kestrel
participant Host
participant MW as Middleware Pipeline
participant Endpoint as Endpoint Execution
Client->>OS: HTTP request
OS->>Kestrel: Forward request
Kestrel->>Host: Create HttpContext
Host->>MW: Invoke pipeline
MW->>Endpoint: Route matched, execute
Endpoint-->>MW: Response
MW-->>Kestrel: Response after post-processing
Kestrel-->>OS: Send HTTP response
OS-->>Client: Response delivered
إجراء مراقب في MVCHttpContextصف صفحة في صفحات الفرز
public abstract class HttpContext
{
// The incoming request
public abstract HttpRequest Request { get; }
// The outgoing response
public abstract HttpResponse Response { get; }
// User identity and authentication
public abstract ClaimsPrincipal User { get; set; }
// Request-scoped services
public abstract IServiceProvider RequestServices { get; set; }
// Connection information
public abstract ConnectionInfo Connection { get; }
// WebSocket support
public abstract WebSocketManager WebSockets { get; }
// Request cancellation
public abstract CancellationToken RequestAborted { get; set; }
// Session state
public abstract ISession Session { get; }
// Generic feature collection
public abstract IFeatureCollection Features { get; }
// And more...
}
خط سير في الحد الأدنى للمؤشراتHttpContext.
وسيلة الإشارة
// Basic middleware signature
public delegate Task RequestDelegate(HttpContext context);
// Middleware can be implemented as a method
app.Use(async (context, next) =>
{
// Do something before the next middleware
Console.WriteLine($"Request: {context.Request.Path}");
// Call the next middleware
await next(context);
// Do something after the next middleware
Console.WriteLine($"Response: {context.Response.StatusCode}");
});
٦ -
public delegate Task RequestDelegate(HttpContext context);
يمكن لكل برنامج وسطي أن يفحص أو يعدل الرد
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// Middleware 1: Logging
app.Use(async (context, next) =>
{
Console.WriteLine($"[{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}] Request started: {context.Request.Method} {context.Request.Path}");
await next(context);
Console.WriteLine($"[{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}] Request finished: {context.Response.StatusCode}");
});
// Middleware 2: Custom header
app.Use(async (context, next) =>
{
context.Response.Headers["X-Custom-Header"] = "Hello from middleware!";
await next(context);
});
// Middleware 3: Short-circuit for specific path
app.Use(async (context, next) =>
{
if (context.Request.Path == "/health")
{
context.Response.StatusCode = 200;
await context.Response.WriteAsync("Healthy");
return; // Short-circuit - don't call next()
}
await next(context);
});
// Endpoint
app.MapGet("/", () => "Hello World!");
app.Run();
يجري وضع الصيغة النهائية للرؤساء في صيغتها النهائيةhttp://localhost:5000/هيئة الرد مكتوبة
Console output:
[2024-01-15 10:30:45] Request started: GET /
[2024-01-15 10:30:45] Request finished: 200
Browser output:
Hello World!
Response headers:
X-Custom-Header: Hello from middleware!
أرسل Kestre إرسال رد رد HHTTTTP إلى العميلhttp://localhost:5000/health:
Console output:
[2024-01-15 10:30:50] Request started: GET /health
[2024-01-15 10:30:50] Request finished: 200
Browser output:
Healthy
Response headers:
X-Custom-Header: Hello from middleware!
دال - تخطيط/طلب/طلب الاستقــال/healthالمكيزات الرئيسية
الـ
**هو الجسم المركزي في خط الأنابيب.**وهي تنص على ما يلي:
كل ما تحتاج لمعرفته عن الطلب الحالي وكل ما تحتاجه لبناء الاستجابة يمكن الوصول إليه من خلالالساعة
**المنتصف هو لبنة بناء خط الأنابيب.**في أبسطها، والبرمجيات الوسيطة هي الدالة التي تجهز الطلب:
ثالثاً -مندوب الطلب هو وظيفة قادرة على معالجة طلب HTTTP.
**يتم بناء كامل خط الأنابيب الوسطى من سلسلة من مندوبي الطلب:**كلّ برنامج وسطي يلفّ المندوب التالي، ويخلق سلسلة من المكالمات.
دعونا نرى الحد الأدنى من تطبيقات ASP.NET الأساسية 8 التي تبين خط الأنابيب:
عندما تقوم بزيارة
**سترى:**عندما تقوم بزيارة
لاحظوا كيف أن المنتصف الثالث من النوع القصير قد دبر خط أنابيبالطريق، لكن كُلّ المُلْبَس قبل هو ما زالَ يُنفّذُ.
لِمَ تَفْكِرَ أَسْسَالِ ٱلْفَهْمِ أَشْكَالِ ٱلْأَسْسِ(أ) أن فهم خط الأنابيب أمر بالغ الأهمية للأسباب التالية:
معدل الأداء: معرفة ترتيب التنفيذ يساعدك على وضع عمليات مكلفة بشكل ملائم وتجنب العمل غير الضروري.
دال - الشواغل عبر الدولية: البرامج الوسطى مثالية لتنفيذ عمليات قطع الأشجار والتوثيق ومعالجة الأخطاء وغير ذلك من الشواغل التي تؤثر على جميع الطلبات.IStartupFilter, IHostedServiceجاري م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م_ م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م م
HttpContext1 ف-5، 1 ف-4، 1 خ ع (ر أ)، 1 خ ع (ر أ)في هذا الجزء الأول، لقد أنشأنا الأساس من خلال فهم ما هو خط الأنابيب، كيف يتم تنظيمه، وكيف تتدفق الطلبات من خلاله.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.