現在B/S開發基本都是前後端分離的方式了吧,那麼這往往會涉及到一個跨域的問題,為了安全,跨域訪問往往做了很多的限制,這裡對跨域時自定義響應頭做個筆記。
當我們在.NetCore的後端給請求新增了一個自定義的響應頭的時候,透過api呼叫,響應頭完美的返回:
public class HomeController : ControllerBase
{
[HttpGet]
public object Get()
{
Response.Headers["Access-Token"] = "XXXXXXXX";
return "Hello";
}
}
介面響應可以看到有響應頭:
然後你興高采烈的提交介面,提交給前端,然後前端說拿不到響應頭,這就有點納悶了,明明返回了,為什麼會拿不到?
其實,這也是跨域訪問的一個限制,這就要說說Access-Control-Expose-Headers
這個響應頭了,它的作用主要是在響應跨源請求中,允許伺服器指定哪些響應頭可以暴露給瀏覽器中執行的指令碼(js),往往它需要和Access-Control-Allow-Origin
、Access-Control-Allow-Methods
等一起使用,畢竟要在跨域請求中啦。
所以,我們只需要在跨域的管道配置中新增這個自定義的響應頭既可以:
//跨域
services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
{
builder.AllowAnyHeader()
.AllowAnyOrigin()
.AllowAnyMethod()
.WithExposedHeaders("Access-Token");
});
});
這樣我們就可以前端指令碼上拿到這個響應頭了。