HTTP标头包含存储为在服务器和客户端之间传递的名称/值对的数据。 这些标头与请求或响应一起传递。 保存数据标头是“客户端提示”请求标头,可在Chrome和Opera Web浏览器中使用。
通过“保存数据”请求标头,可以为在Web浏览器中打开数据保存模式的用户构建更轻便,更快速的应用程序。 如果启用了数据保存模式,则Web浏览器将发送一个名为Save-Data的HTTP请求标头,其值为“ on”。 您可以在Chrome中启用此扩展程序,以使Google服务器可以在页面呈现之前对其进行压缩。 请注意,您还可以从设置菜单启用Android中的数据保存模式。
Save-Data是一项出色的性能优化技巧,您可以利用它来交付更快,更轻便的Web应用程序-通常是通过将高分辨率图像替换为低分辨率版本或完全省去不必要的图像。 本文讨论了如何在ASP.Net Core应用程序中使用Save-Data请求标头。
创建一个ASP.Net Core Web应用程序项目
首先,让我们创建一个ASP.Net Core项目。 如果您的系统已启动并运行Visual Studio 2017,请按照以下步骤在Visual Studio中创建一个新的ASP.Net Core Web应用程序项目。
- 启动Visual Studio 2017 IDE。
- 单击文件>新建>项目。
- 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。
- 指定项目的名称。
- 单击确定保存项目。
- 接下来显示一个新窗口“ New .Net Core Web Application…”。
- 选择.Net Core作为运行时,并从顶部的下拉列表中选择ASP.Net Core 2.2(或更高版本)。
- 选择API作为项目模板
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
- 确保选择“无身份验证”,因为我们也不会使用身份验证。
- 单击确定。
按照这些步骤将在Visual Studio中创建一个新的ASP.Net Core项目。 在下一节中,我们将研究如何在刚刚创建的ASP.Net项目中使用Save-Data标头。
在ASP.Net Core中创建保存数据标头中间件
现在,我们将构建一个中间件,该中间件将检查是否启用了Save-Data标头。 如果启用了保存数据,则中间件将发送优化的响应。 右键单击您先前创建的项目,然后选择“添加->类…”以创建一个新的C#代码文件。 将此文件命名为SaveDataMiddleware.cs。 接下来,在该文件中编写以下代码。
public class SaveDataMiddleware
{
private readonly RequestDelegate _next;
private readonly IHostingEnvironment _hostingEnvironment;
public SaveDataMiddleware(RequestDelegate next, IHostingEnvironment hostingEnvironment)
{
_next = next;
_hostingEnvironment = hostingEnvironment;
}
public async Task Invoke(HttpContext httpContext)
{
bool isSaveDataEnabled = false;
if (httpContext.Request.Headers.TryGetValue
("save-data", out StringValues saveDataHeaders))
{
isSaveDataEnabled = true;
}
if (isSaveDataEnabled)
{
//Write your custom code here
// to send out optimized content
}
else
{
await _next(httpContext); //Save-Data not enabled
}
}
}
将保存数据中间件添加到ASP.Net Core中的请求管道
在构建ASP.Net Core应用程序时,您可以利用各种中间件组件来自定义请求和响应的处理,甚至检查,路由或修改流经管道的请求和响应消息。
现在已经创建了定制中间件,我们必须将其添加到请求处理管道中。 使用启动类的Configure方法配置ASP.Net Core中的中间件。 以下代码段显示了如何在IApplicationBuilder类型的实例上使用扩展方法将中间件添加到请求处理管道。
public static class SaveDataRequestHeaderMiddlewareMiddlewareExtensions
{
public static IApplicationBuilder UseSaveDataMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<SaveDataRequestHeaderMiddleware>();
}
}
最后,这是在Startup类的Configure方法中如何使用扩展方法的方法。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSaveDataMiddleware();
app.UseMvc();
}
这就是您需要做的。 现在可以使用自定义中间件了。 请注意,我尚未编写用于优化内容的代码-如果启用了“保存数据”,我将留给您编写必要的代码来呈现优化的内容。
Save-Data标头解决了在客户端交付优化内容的需求。 此标头用于让服务器知道客户端打算减少数据使用量。 通过检测ASP.Net Core应用程序中的Save-Data标头,您可以通过响应轻量级内容来容纳客户端。