【问题标题】:Images from http site on https site: mixed modehttps站点上http站点的图像:混合模式
【发布时间】:2016-11-10 05:52:20
【问题描述】:

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

方法/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;
    }

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

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

【问题讨论】:

    标签: c# asp.net-mvc-4 mixed-content


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,我在第一个解决方案中使用了内存缓存,但我担心它会降低服务器速度,所以我决定更改它:)。经过一些更改后,我认为新版本有效,但没有:(
    • 您可以将文件写入临时目录,稍后直接从​​硬盘提供,也可以为其设置输出缓存以减少对Web服务器的点击次数,浏览器将其缓存并且根本不会从服务器请求它。这应该可以消除 Web 服务器上的任何负担
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多