YARP簡介 —— IHttpForwarder

YARP框架中,核心處理類是IHttpForwarder接口,它實現了基礎的轉發流程:從 HttpContext 創建 Http 查詢信息、發送到目標地址,並將響應結果寫會HttpContext。

IHttpForwarder特點如下:

  1. 靈活,能根據請求動態選擇代理目標
  2. 強大,能修改http請求和響應的頭
  3. 支持gRPC或WebSockets這種流式協議
  4. 支持異常處理

它簡單靈活,本身是一個反向代理的功能類的。 用它本身是可以非常簡單的實現一個反向代理功能的。代碼如下: 

using Yarp.ReverseProxy.Forwarder;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpForwarder();        //
添加服務

var httpClient = new HttpMessageInvoker(new SocketsHttpHandler()
{
    UseProxy          = false,
    AllowAutoRedirect = false,
});
var requestConfig = new ForwarderRequestConfig();

var app    = builder.Build();
var forwarder = app.Services.GetService<IHttpForwarder>();

app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.Map("/test/{**catch-all}", async httpContext =>
    {
        await forwarder.SendAsync(httpContext, "http://localhost:5132/",
            httpClient, requestConfig, HttpTransformer.Default);
    });
});

app.Run();

跑起來後,就可以發現test下的接口都已經可以轉發到 http://localhost:5132/ 了。

    

更多信息可以參看微軟的官方文檔Direct Forwarding,微軟也提供了一個最簡單的完整示例ReverseProxy.Direct.Sample

上述代碼本身是實現了一個完整的的反向代理的功能的。和目前的主流的反向代理框架比起來,主要缺少一些高級功能,如:路由匹配、負載均衡、會話保持、重試等。但這些高級功能本身不是必須的,這個時候直接用IhttpProxy更加簡單直接,也可以方便我們自己構建一個更加靈活高效的反向代理框架。

參考文章:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章