这一节我们来介绍HTTP Header,HTTP Header是包含以键值对形式表示的元数据,这些元数伴随HTTP 请求和响应一起发送。它们可以用于定义缓存行为、进行身份验证以及管理会话状态。HTTP Header帮助 API 客户端和服务器更高效地进行通信,并使开发人员能够优化和自定义 API 的行为。
Content-Type
Content-Type 响应头是 Content-Type 请求头的对应项,它表明服务器发送给客户端的数据类型。头值通常包括媒体类型(如 text/html,application/json,image/jpeg和audio/mp3),以及任何可选参数。
Cache-Control 控制客户端浏览器或中间缓存中的缓存行为。它定义了响应的缓存方式、过期时间以及如何重新验证。例如,Cache-Control: max-age=3600, public 指示客户端将响应缓存最多 3600 秒(1 小时),并允许公共缓存进行缓存。
Content-Length 指定响应主体的大小(以字节为单位),这有助于客户端预期将要接收的数据量。通过允许客户端提前规划以更有效地分配内存和处理数据,这可以提升性能。
在ASP.NET Core中如何获取请求的Header呢?我们通过例子做演示,创建一个ASP.NET Core 空项目模板,添加如下代码:
var app = WebApplication.Create();
app.Run(async context =>
{
context.Response.Headers.Append("content-type", "text/html");
await context.Response.WriteAsync("<h1>Request Headers</h1>");
await context.Response.WriteAsync("<ul>");
foreach (var h in context.Request.Headers)
{
await context.Response.WriteAsync($"<li>{h.Key} : {h.Value}</li>");
}
await context.Response.WriteAsync("</ul>");
});
app.Run();
运行结果如下:
List<FieldInfo> GetConstants(Type type)
{
FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
return fieldInfos.ToList();
}
await context.Response.WriteAsync("<h1>Request Headers from Microsoft.Net.Http.Headers.HeaderNames</h1>");
await context.Response.WriteAsync("<ul>");
foreach (var h in GetConstants(typeof(HeaderNames)))
{
await context.Response.WriteAsync($"<li>{h.Name} = {h.GetValue(h)}</li>");
}
await context.Response.WriteAsync("</ul>");