【问题标题】:Why are HTTP images not appearing in HTTPS application?为什么 HTTP 图像没有出现在 HTTPS 应用程序中?
【发布时间】:2013-11-09 09:36:53
【问题描述】:

我拥有使用不安全 (HTTP) ArcGIS 地图服务的安全 (HTTPS) 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/导出?....&f=图像 但未显示图像。如果我直接在地址栏中输入此 URL,则会显示预期的图像。

没有任何错误报告,包括 IIS 7.5 日志。我意识到混合内容并不理想,但我目前别无选择。关于此类问题,我发现了很多对 SilverLight 的引用,但我只使用 javascript 和 ASP.Net。我还比较了 https 和 http 的页面源 - 没有区别。

【问题讨论】:

  • https://gis.mydomain.com可以访问http://gis.mydomain.com吗?
  • 不,不在这个阶段,但我可以看到这是我需要做的。

标签: javascript asp.net image https arcgis


【解决方案1】:

在浏览安全网站时,除非您(访问者)授权,否则浏览器不会加载“非安全项目”。

从服务器端解决此问题的唯一方法是将“非安全”内容置于 https 域下,使其安全。

更新:

顺便说一下,如果您没有在内容 URL 中指定协议,例如 //gis.mydomain.com 而不指定它是 http:// 还是 https://,浏览器将自动采用与用于访问网站也可以加载此内容。

因此,如果您使用http:// 访问,它也会使用http:// 加载依赖项,如果您使用https://,它也会这样做。

【讨论】:

  • 好的,所以它纯粹是浏览器/客户端行为?我被引导不相信,因为 IE 提示我允许混合内容,但仍然没有显示它。 Chrome 也没有显示不安全的内容,但 Safari 加载了它,没有提出任何问题。
  • 很有可能。大多数浏览器可以配置为始终显示混合内容而无需询问,这可能是您的 Safari 发生的事情(顺便说一下,它使用与 Chrome 相同的引擎)。您可以通过在浏览包含混合内容的页面时单击地址栏旁边显示的盾牌图标来使 Firefox 显示它。
  • ...在 Chrome 中使用 --allow-running-insecure-content 命令行标志启动它。
  • @Havenard 你好,假设在谷歌浏览器HTTPS站点下加载HTTP图像不起作用,是不是同一个原因?
【解决方案2】:

解决此问题的另一种方法是通过您的 (https) 主机代理不安全的内容。 ESRI 在这个过程中有一些稍微过时的文档(包括一个示例 ASP.Net 代理页面)here,但它的大部分/全部仍应保留在最新版本的 API 中。根据记忆,他们最近(3.5?)使代理可以基于每个服务进行配置,这非常方便。

在您的情况下,您可以忽略基于令牌的身份验证内容,您真正要寻找的只是让不安全的内容来自安全主机。

【讨论】:

  • 我很高兴看到您的回复,但它似乎不起作用,因为 ArcGIS 服务器仍然使用导出图像的 http 地址进行响应,并且 IE10 将其识别为不安全的内容。为了确保我们“在同一页面上”,我在我的应用程序中创建了 ESRI 概述的 proxy.ashx,所有地图服务请求都以 mysite/proxy.ashx 为前缀 - 代理只是将不安全的请求转发到 ArcGIS。跨度>
  • 澄清 - 您是否将您的实例配置为使用代理?抱歉懒惰的链接,这里还有一些up to date documentation - 你设置了esri.config.defaults.io.proxyUrl 和/或esri.config.defaults.io.alwaysUseProxy吗?
  • 不,不是这样的。我没有太多时间进行调查,但感谢您提供更多信息。我会尽快再看一遍。我还发现我的 arcgis CDN 被硬编码为 http 只是为了增加我的困惑。
  • 再次感谢@Juffy - 我学到了很多,因为我没有按照预期的方式使用代理。在看到您上面的评论之前,我一直在硬连线网址。现在一切都显示出来了,Chrome 仍然报告不安全的内容。 Fiddler 显示有一个对 /arcgis/rest/info 的 http 调用(绕过代理),但总的来说它的结果很好。
猜你喜欢
  • 2021-04-20
  • 2011-11-19
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多