【发布时间】:2012-03-25 04:13:26
【问题描述】:
我在发送 JSONP 请求从 HTTPS 站点到 HTTP 站点时遇到问题。
我有一个通过 https 的(非本地)测试环境(具有有效证书),我能够成功运行所有这些跨站点/“跨协议”请求(带有警告,但没有错误)。
Google Chrome Javascript 控制台输出:
The page at https://my.test.environment/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704
但是,在生产中,(在 Google App Engine 上,appspot 子域)Google Chrome 会阻止所有等待用户确认的请求。
Google Chrome Javascript 控制台输出(特别注意 [blocked] 文本):
[blocked] The page at https://production.appspot.com/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704
我知道我正在做的事情并不安全,但这项服务是由第三方提供的,目前还没有可用的 SSL 通信。我对此感到非常困惑,因为我不明白为什么在测试环境中而不是在 apppot(Google App Engine)下工作(带有警告)。
我试图调查标题但没有成功。
测试环境头文件:
Connection:Keep-Alive
Content-Encoding:gzip
Content-Language:es
Content-Length:2524
Content-Type:text/html;charset=utf-8
Date:Wed, 07 Mar 2012 15:48:30 GMT
Keep-Alive:timeout=15, max=100
Set-Cookie: cookie_info...
Vary:Accept-Encoding
APPSpot 标头:
access-control-allow-credentials:false
access-control-allow-origin:*
cache-control:no-cache, must-revalidate
content-encoding:gzip
content-length:47890
content-type:text/html; charset=utf-8
date:Wed, 07 Mar 2012 14:52:02 GMT
expires:Fri, 01 Jan 1990 00:00:00 GMT
pragma:no-cache
server:Google Frontend
set-cookie: coookie_info....
status:200 OK
vary:Accept-Encoding
version:HTTP/1.1
我不知道为什么这在测试环境中起作用,并且谷歌浏览器在 APPSpot 上阻止了相同的方法。
有什么想法吗?
【问题讨论】:
-
Chrome 对 Google HTTPS 页面的处理通常与标准 HTTPS 页面不同(例如特殊证书检查)。不安全的内容可能也是这种情况吗?
-
也许你是对的。实际上,只有在我们将应用部署在 GAE 上时才会出现问题(appspot 使用 Google 的证书)。我会深入研究它。谢谢!
-
我自己的服务器和(有效的)证书也有同样的问题...
-
我必须指出一件重要的事情——您刚刚写到您正在对第三方进行 JSONP 调用,而他们不提供安全性。伙计... JSONP 只是从第三方运行 javascript 并希望它使用一些数据调用您的函数的名称。如果该调用中没有 https,任何人都可以执行 MITM 并运行一些代码来拦截您尝试使用 https 保护的任何数据。
标签: javascript ajax https cross-domain jsonp