为什么HTTP图片在HTTPS应用程序中无法显示?

3
我已经保护(HTTPS)了使用不安全的(HTTP)ArcGIS地图服务的ASP.Net MVC 4应用程序。这些服务使用JavaScript调用以获取相关的地图图像。
如果我在我的应用程序中使用HTTP,一切都按预期工作。但是,如果我使用HTTPS,则IE10和Chrome不会显示所请求的地图图像(IE提示显示不安全内容),但Safari会显示该图像而不会有任何问题。
例如,假设我的应用程序为https://app.mydomain.com,我的地图服务位于http://gis.mydomain.com。
我运行fiddler并查看响应,例如:(删除了一些参数以简化):http://gis.mydomain.com/arcgis/rest/services/Energy/BaseService/MapServer/export?....&f=image,但未显示该图像。如果我直接在地址栏中输入此URL,则会显示预期的图像。
没有任何错误报告,包括IIS 7.5日志。我意识到混合内容并不理想,但目前我没有选择。我发现关于这种类型问题的大量参考资料与SilverLight有关,但我仅使用javascript和ASP.Net。我还比较了https和http的页面源代码-没有区别。

能否通过 https://gis.mydomain.com 访问 http://gis.mydomain.com - Havenard
不,目前还没有,但我可以看到那是我需要做的。 - tr3v
2个回答

5
当浏览安全网站时,浏览器不会加载“非安全项目”,除非您(访问者)授权。
从服务器端解决此问题的唯一方法是通过将“非安全”内容也放置在https域下,使其变得安全。
更新:
顺便说一下,如果您没有在内容URL中指定协议,例如//gis.mydomain.com,而没有指定它是http://还是https://,那么浏览器将自动假定与访问网站时使用的相同协议来加载此内容。
因此,如果您使用http://访问,则也会使用http://加载依赖项,如果您使用https://,则也会这样做。

好的,所以这完全是浏览器/客户端的行为吗?我原本认为不是这样,因为IE提示我允许混合内容,但仍然没有显示它。Chrome也没有显示不安全的内容,但Safari加载了它,没有任何问题。 - tr3v
1
很可能是这样。大多数浏览器都可以配置为始终显示混合内容而不需要询问,这可能就是你的Safari发生的情况(顺便说一下,它使用与Chrome相同的引擎)。你可以通过在浏览包含混合内容的页面时点击地址栏旁边显示的盾牌图标来让Firefox显示它。 - Havenard
1
通过使用 --allow-running-insecure-content 命令行标志,在 Chrome 中启动它。 - Juffy
@Havenard 你好,如果在Google浏览器的HTTPS网站下加载HTTP图片无法正常工作,是同样的原因吗? - BaiClassmate Xiao

1
另一种解决方法是通过您的(https)主机代理不安全的内容。ESRI在此过程中提供了一些略有过时的文档(包括一个ASP.Net代理页面示例)这里,但其中大部分/全部仍适用于最新版本的API。记忆中,他们最近(3.5?)使代理可按服务进行配置,非常方便。在您的情况下,可以忽略基于令牌的身份验证内容,您真正需要的只是让不安全的内容通过安全主机传输。

很高兴看到您的回复,但是似乎不起作用,因为ArcGIS服务器仍然响应导出图像的http地址,而IE10将其识别为不安全内容。 仅为确保我们“在同一页”,我在我的应用程序中按照ESRI的说明创建了proxy.ashx,并且所有地图服务请求都以https://mysite/proxy.ashx为前缀 - 代理只是将不安全的请求转发到ArcGIS。 - tr3v
1
请澄清一下 - 您是否配置了实例以使用代理?抱歉没有提供链接,这里有更多最新文档 - 您是否设置了 esri.config.defaults.io.proxyUrl 和/或 esri.config.defaults.io.alwaysUseProxy - Juffy
不是这样的。我没有太多时间去调查,但感谢您提供的额外信息。我会尽快再次查看。我还发现我的ArcGIS CDN硬编码为http,这让我更加困惑。 - tr3v
再次感谢@Juffy - 我学到了很多,因为我没有按照代理的意图使用它。在看到您上面的评论之前,我一直在硬编码URL。现在所有内容都显示出来了,但Chrome仍然报告不安全的内容。Fiddler显示有一个对/arcgis/rest/info的http调用(绕过代理),但总体上是一个好结果。 - tr3v

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接