Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTTPS到HTTP JSONP请求_Javascript_Ajax_Https_Cross Domain_Jsonp - Fatal编程技术网

Javascript HTTPS到HTTP JSONP请求

Javascript HTTPS到HTTP JSONP请求,javascript,ajax,https,cross-domain,jsonp,Javascript,Ajax,Https,Cross Domain,Jsonp,我从HTTPS站点向HTTP站点发送JSONP请求时遇到问题 我有一个通过https(具有有效证书)的(非本地)测试环境,在那里我能够成功地运行所有这些跨站点/跨协议的请求(有警告,但没有错误) 谷歌Chrome Javascript控制台输出: The page at https://my.test.environment/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928

我从HTTPS站点向HTTP站点发送JSONP请求时遇到问题

我有一个通过https(具有有效证书)的(非本地)测试环境,在那里我能够成功地运行所有这些跨站点/跨协议的请求(有警告,但没有错误)

谷歌Chrome Javascript控制台输出

The page at https://my.test.environment/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704
然而,在生产中,(在谷歌应用程序引擎的appspot子域上),谷歌浏览器正在阻止所有等待用户确认的请求

谷歌Chrome Javascript控制台输出(特别注意[阻止]文本):

我知道我所做的是不安全的,但这些服务是由第三方提供的,目前还没有可用的SSL通信。我真的对此感到困惑,因为我不明白为什么在测试环境中工作(带有警告),而不是在appspot(谷歌应用程序引擎)下工作

我试图调查标题,但没有成功

测试环境标题:

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
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标题:

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
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上被Google Chrome阻止


有什么想法吗?

apache代理将代表您向端点发出请求。您甚至可以对服务(json、xml、图像、post、put、delete等)进行非jsonp请求,因为浏览器认为它正在对同一个域进行请求

您的non.secure.site vhost文件将包含以下内容

ProxyRequests Off
ProxyPreserveHost On 
<Proxy *>
    Allow from all
</Proxy>
ProxyPass /appspot https://production.appspot.com/
ProxyPassReverse /appspot https://production.appspot.com/
谷歌proxypass获取更多信息


如果您没有其他选择,只能使用不安全的第三方API,您可以自己考虑使用该API

创建一个服务器端脚本,该脚本只能通过SSL访问,并将充当标记和API之间的代理或转发器。通过这种方式,您可以通过自己对数据进行检查和验证来提高安全性,并且因为您将在SSL下提供数据,所以不会出现任何“混合内容”错误

顺便说一句,我还没有测试过,在GAE提供的谷歌证书下的网站总是有可能会有不同的表现


希望我能帮上忙。

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

您需要的最重要的事情是用于执行curl的服务器端页面必须设置一些允许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");

Chrome对待Google HTTPS页面的方式通常不同于标准HTTPS页面(例如,特殊证书检查)。也许这也是不安全内容的情况?也许你是对的。事实上,只有当我们在GAE上部署应用程序(appspot使用谷歌的证书)时,问题才会出现。我会深入研究的。谢谢我在自己的服务器和(有效)证书上也有同样的问题……哦,好吧,在这里回答:有一件很重要的事情我必须指出——您刚刚写到您正在对第三方进行JSONP调用,而他们不提供安全性。伙计。。。JSONP只是从第三方运行javascript并希望它使用一些数据调用您的函数的名称。如果该调用中没有https,任何人都可以执行MITM并运行一些代码,截取您试图使用https保护的任何数据。