来自 http 站点的图像在 https 站点上:混合模式

Images from http site on https site: mixed mode

我基于 https 的站点(站点 A)使用来自基于 http 的站点 B 的图像。我导致了混合内容错误。为了解决这个问题,我找到了用我的控制器方法交换每个外部 link 的解决方案,比如 http://www.siteB.com/imageX.png 转发到外部图像。新的 link 格式为:

方法/api/misc/forward的代码如下:

 [HttpGet]
    public async Task<HttpResponseMessage> Forward(string url)
    {
        HttpResponseMessage httpResponseMessage = new HttpResponseMessage();

        try
        {

            var response = Request.CreateResponse(HttpStatusCode.Found);
            response.Headers.Location = new Uri(HttpUtility.UrlDecode(url));
            return response;
        }
        catch (Exception ex)
        {
            httpResponseMessage.StatusCode = HttpStatusCode.NotFound;
            _loggerService.LogException(ex, url);
        }

        return httpResponseMessage;
    }

但浏览器仍然能够将其识别为混合模式....为什么? 发送到浏览器的原始图像 link 来自基于 https 的站点。

有什么快速提示吗?我不想缓存站点 B:) 中的所有图像。

因为您的代码发回一个重定向到另一个位置,所以,最终,浏览器仍然转到 HTTP 图像。

您的浏览器在 HTTPS 中调用控制器,然后控制器操作向浏览器发回重定向命令,浏览器从您在 response.Headers.Location 中设置的新位置检索图像。

如果你想避免混合模式,那么你需要从控制器中获取图像并从操作中获取return一个FileResult,这样浏览器就不必访问了HTTP 站点。

另一种方法是将图像复制到您的站点。