【发布时间】:2013-05-17 20:51:37
【问题描述】:
所以我有一个需要与桌面应用程序通信的 GWT webapp。为此,桌面程序在给定端口(例如,http://localhost:9000)启动网络服务器。
我已经实现了 JSON-P 通信来绕过跨域过滤器,这在本地测试时工作正常(webapp 在http://localhost:8888 运行)。问题是,生产网站是通过 https 提供的,没有浏览器允许您通过 http 从 https 请求 javascript。
所以我尝试了一些方法。
我已经使用 Java 的 HttpServletResponse.addHeader("Access-Control-Allow-Origin", "*") 在服务 GWT javascript 的服务器和 javascript 尝试向其发出请求并发出 HTTP 请求的服务器上设置了“Access-Control-Origin: *”标头,但是被同源过滤器阻止(可能是因为我试图从 https 向 http 发出请求。)
我尝试使用来自新窗口(通过调用 $wnd.open 创建)的 Json-P 通信,但没有希望通过 http 加载的 URL,但它是通过 https 加载的,所以我遇到了同样的问题问题和以前一样。
有没有办法从通过 https 提供的 javascript 到 http 发出跨域请求?没有任何可行的方法在 localhost 上运行 https(自签名证书在发出 JSON-P 请求时被阻止。)
【问题讨论】:
-
您确定自签名 HTTP 证书无助于建立跨域 HTTPS 连接吗?
-
您也许可以从 Internet 上某处受信任的签名 HTTPS 证书代理到本地运行的服务器。
-
自签名绝对没有帮助。至少在 Chrome 中,如果您提供的是实际页面,则会出现带有“继续”按钮的警告。但是 AJAX 请求会静默失败。
-
既然您可以安装本地桌面应用程序,或许您也可以导入您的根证书并在本地服务器中使用?那应该可以。
-
@MichałGrzejszczak 安装 root ca 是一个非常糟糕的主意,看看 DELL 发生了什么computerworld.com/article/3008113/security/…
标签: http https cross-domain jetty jsonp