google-chrome - 在非 https 网站上强制执行 https 请求 - chrome 中的混合内容错误
问题描述
这可能是一个奇怪的案例,如果有更好的方法,请随时告诉我。
所以我有一个带有负载均衡器的应用程序。负载均衡器仅接收 HTTPs 流量。到目前为止,一切都很好。
然后负载均衡器将它作为 HTTP 发送到我的 asp.netcore。
这意味着什么:
虽然访问该网站是在 Https 中,但 asp.netcore 应用程序并不知道它。
我只在开发环境中将其指定为 HTTPS,因为我的 cookie 仅在 HTTPS 中
但这给了我这个问题:
混合内容:“pagePath”处的页面是通过 HTTPS 加载的,但请求了不安全的清单“path/site.webmanifest”。此请求已被阻止;内容必须通过 HTTPS 提供。
这是我的启动
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
}
else
{
app.UseHsts();
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseExceptionHandler("/error/500");
app.UseMiddleware<WebRequestLoggerMiddleWare>();
app.UseMiddleware<UserTimeZoneMiddleWare>();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
还有我的 cookie 政策,还在 statup.cs
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = new PathString("/account/login/");
options.AccessDeniedPath = new PathString("/account/forbidden/");
options.SlidingExpiration = true;
options.ExpireTimeSpan = TimeSpan.FromHours(cookieSettings.CookieExpirationInHours);
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.HttpOnly = true;
});
确保通过 HTTPS 请求 webmanifest 的最佳方法是什么?
我是否应该强制整个网站使用 HTTPS 并将来自 LB 的流量路由为 https?这是一种方法,但它不应该是必要的......
解决方案
反向代理和 ASP.NET Core 应用程序之间的流量不必通过 https 加密,但必须满足两个条件,以便 ASP.NET Core 应用程序知道原始 HTTP 请求是通过 https 还是 http 来的。
- 您的反向代理必须使用原始主机的原始协议和 IP 发送正确的标头。其默认标头用于
X-Forwarded-For
远程 IP 和X-Forwarded-Proto
协议 - 在 IIS 上运行时默认设置转发的标头中间件,并且(根据文档)需要为其他托管方案启用。
可以在配置 ASP.NET Core 以使用代理服务器和负载平衡器下阅读该文档。
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseForwardedHeaders(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); // In ASP.NET Core 1.x, replace the following line with: app.UseIdentity(); app.UseAuthentication(); app.UseMvc(); }
如果您的代理名称标题与X-Forwarded-For
,X-Forwarded-Proto
和不同X-Forwarded-Host
,您可以使用ForwardedForHeaderName
,ForwardedProtoHeaderName
和ForwardedHostHeaderName
属性ForwardedHeadersOptions
来更改它。
此外,您的Startup
课程应如下所示
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
// redirect to Https
app.UseHttpsRedirection();
根据官方示例并确保用户在第一次访问时被重定向到 http,HSTS应处理连续请求
推荐阅读
- angular - 可以进行数据绑定,但不能使用我在 te 组件中通过 GraphQL 查询获取的数据
- primefaces - 从 xa 更新版本迁移 PrimeFaces
- r - 重新缩放 ggplot 中的 alpha 以从 0 开始
- javascript - 在 Google Data Studio 中,有没有一种方法可以过滤我的数据,而无需在每次过滤请求后获取它?
- python - 精灵奇怪地运动
- python - 请解释下面的循环
- python - 尝试选择两列时出现 np.where 错误
- r - R 中的问题:从 tibble 中提取日期 - 直接解决时有效,但不是通过引用。有任何想法吗?
- python-3.x - 这个python3代码的正确缩进是什么
- flutter - 如何将相机捕获的图像转换为带有颤振的base64