You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chromium浏览器自动替换图片HTTP为HTTPS致404,ASP.NET Core 6 MVC求解决方案

解决Chromium自动将HTTP图片链接转为HTTPS的问题

方法1:通过内容安全策略(CSP)阻止自动升级并允许HTTP图片加载

Chromium浏览器的HTTP转HTTPS自动升级通常由Upgrade-Insecure-Requests策略触发,你可以通过配置CSP来控制这一行为:

方式A:在页面头部添加Meta标签

在布局页(如_Layout.cshtml)的<head>区域添加以下标签,明确允许从目标下载主机加载HTTP图片,同时禁用自动升级:

<meta http-equiv="Content-Security-Policy" content="img-src http://你的下载主机域名; upgrade-insecure-requests false;">

注意:将http://你的下载主机域名替换为实际的下载主机地址,比如http://cdn.example-download.com

方式B:通过ASP.NET Core中间件添加全局响应头

如果希望全站应用该策略,可在Program.cs中添加中间件注入响应头:

var builder = WebApplication.CreateBuilder(args);

// 其他服务配置...

var app = builder.Build();

// 在UseStaticFiles之后添加该中间件
app.Use(async (context, next) =>
{
    context.Response.Headers.Add("Content-Security-Policy", "img-src http://你的下载主机域名; upgrade-insecure-requests false;");
    await next();
});

// 其他中间件配置...

app.Run();

方法2:通过ASP.NET Core代理HTTP图片(推荐)

现代浏览器对混合内容(HTTPS页面加载HTTP资源)的限制越来越严格,即使阻止了自动升级,仍可能被浏览器拦截。更稳妥的方案是通过自身服务器代理图片请求:

  1. 创建图片代理接口:
[ApiController]
[Route("proxy/image")]
public class ImageProxyController : ControllerBase
{
    private readonly HttpClient _httpClient;

    public ImageProxyController(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    [HttpGet]
    public async Task<IActionResult> GetImage([FromQuery] string url)
    {
        // 验证请求来源,避免安全风险
        if (!url.StartsWith("http://你的下载主机域名"))
        {
            return BadRequest();
        }

        var response = await _httpClient.GetAsync(url);
        if (!response.IsSuccessStatusCode)
        {
            return NotFound();
        }

        var contentType = response.Content.Headers.ContentType?.ToString() ?? "image/jpeg";
        var stream = await response.Content.ReadAsStreamAsync();
        return File(stream, contentType);
    }
}
  1. 在Program.cs中注册HttpClient:
builder.Services.AddHttpClient<ImageProxyController>();
  1. 修改视图中的图片引用,通过代理加载:
<img src="/proxy/image?url=@Uri.EscapeDataString(Model.ImageLink)" />

这种方式既规避了混合内容限制,也不会触发浏览器的HTTPS自动升级。

方法3:浏览器端临时禁用自动升级(仅测试用)

如果只是本地测试,可在Chromium内核浏览器中临时关闭该功能:

  • 地址栏输入chrome://flags/#automatic-https-upgrades(Edge为edge://flags/#automatic-https-upgrades)
  • 将选项设置为Disabled
  • 重启浏览器

注意:该方法仅适用于本地调试,无法解决线上用户的问题

内容的提问来源于stack exchange,提问作者mahdiyar abdollahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:15:20