HTTPS到HTTP JSONP请求

问题描述:

我在发送JSONP请求从HTTPS站点到HTTP站点的问题。HTTPS到HTTP JSONP请求

我有一个(非本地)通过https(有效证书)的测试环境,我可以成功地运行所有这些跨站点/“交叉协议”请求(带有警告,但没有错误)。

谷歌浏览器的Javascript控制台输出

The page at https://my.test.environment/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704 

然而,在生产,(在谷歌应用程序引擎,Appspot上子域)谷歌浏览器阻止等待用户确认的所有请求。

谷歌浏览器的Javascript控制台输出(特别注意[锁定]文本):

[blocked] The page at https://production.appspot.com/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704 

我知道我在做什么是不安全的,而是由第三方提供该服务到目前为止还没有可用的SSL通信。我真的很困惑,因为我不明白为什么在测试环境中工作(有警告),而不是在appspot(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 

我不知道这是为什么努力测试envinroment和同样的方法是通过谷歌浏览器阻塞Appspot上。

有什么想法?

+4

Chrome对待Google HTTPS页面的方式通常与标准HTTPS页面不同(例如特殊证书检查)。也许这是不安全的内容的情况? – Robert 2012-03-07 16:20:37

+0

让你aré吧。事实上,只有在GAE上部署应用程序(appspot使用Google的证书)时才会出现问题。我会深入研究它。谢谢! – 2012-03-08 22:04:52

+0

我在我自己的服务器和(有效)证书上有同样的问题... – Stefano 2012-09-06 14:02:41

一个Apache代理将代表您的端点的请求。你甚至可以拥有对服务的非jsonp请求(json,xml,images,post,put,delete等),因为浏览器认为它正在对同一个域进行请求。

你non.secure.site虚拟主机文件将包含类似

ProxyRequests Off 
ProxyPreserveHost On 
<Proxy *> 
    Allow from all 
</Proxy> 
ProxyPass /appspot https://production.appspot.com/ 
ProxyPassReverse /appspot https://production.appspot.com/ 

一旦你设置它,你只需要调用该服务像...

http://non.secure.site/appspot/service?jsonCallback=jsonp1331132928704 

谷歌的ProxyPass更多信息

https://serverfault.com/questions/429404/help-me-understand-how-to-use-proxypass

如果您没有其他选择,但我们如果没有安全的第三方API,您可以自己考虑关于MITM的API。

创建一个服务器端脚本,该脚本将仅通过SSL访问,并将充当代理或API和代理之间的代理或代理。这样,您可以通过对数据进行自己的检查和验证来提高安全性,并且由于您将在SSL下提供服务,因此您将不会收到任何“混合内容”错误。

顺便说一句,我还没有测试过,总是有机会GAE提供的Google证书下的网站会有不同的行为。

希望我能帮上忙。

我在http和https之间做同样的事情也有同样的问题。这是一个跨域问题。

您需要的最重要的事情是您用于卷曲的服务器端页面必须设置一些标头以允许http连接到https。以下是...

header("Access-Control-Allow-Origin: your https url"); 
header("Access-Control-Allow-Methods: POST, GET"); 
header("Access-Control-Max-Age: 1728000"); 

header("Access-Control-Allow-Headers: Content-Type, Connection, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"); 
header("Connection: close");