Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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页面_Javascript - Fatal编程技术网

Javascript 如何将数据从HTTPS页面发布到HTTP页面

Javascript 如何将数据从HTTPS页面发布到HTTP页面,javascript,Javascript,我知道这很难,但我想我还是会问这个问题的 我有一个HTTPS页面,正在动态创建一个表单。我想将表单发布到HTTP页面。是否可以在浏览器不弹出警告的情况下执行此操作?当我在IE8上执行此操作时,我收到以下消息: ? 本质上,我问的是问题1554237的反方向。不幸的是,我知道从HTTPS发布到HTTP时绝对没有办法不被警告。如果您安全地提供表单,浏览器也希望安全地提交数据。如果还有其他可能的话,用户会感到惊讶。不,这是不可能的。我们的好朋友IE总是会弹出该警告。您可以通过自己充当表单目标的代理来解

我知道这很难,但我想我还是会问这个问题的

我有一个HTTPS页面,正在动态创建一个表单。我想将表单发布到HTTP页面。是否可以在浏览器不弹出警告的情况下执行此操作?当我在IE8上执行此操作时,我收到以下消息:

?


本质上,我问的是问题1554237的反方向。

不幸的是,我知道从HTTPS发布到HTTP时绝对没有办法不被警告。如果您安全地提供表单,浏览器也希望安全地提交数据。如果还有其他可能的话,用户会感到惊讶。

不,这是不可能的。我们的好朋友IE总是会弹出该警告。

您可以通过自己充当表单目标的代理来解决此问题(即,让表单提交到服务器,然后服务器触发正常HTTP请求并返回响应),或者只允许通过HTTP访问带有表单的页面。

如果您不需要实际重定向到不安全的页面,您可以提供一个web服务(经过身份验证),为您发出请求并返回数据

例如:
在已验证页面中,调用
doInsecure.action
,通过https将其创建为web服务
doInsecure.action
然后向不安全页面发出手动POST请求,并输出响应数据。

您应该可以使用opensource project Forge实现这一点,但这听起来有些过分了。Forge项目提供了一个JavaScript接口(和XmlHttpRequest包装器),可以执行跨域请求。底层实现使用Flash实现跨域(包括http https)通信


因此,您可以通过https从服务器加载Forge JavaScript和swf,然后通过http执行基于Forge的XmlHttpRequest来完成POST。这将使您不必在服务器上执行任何代理工作,但同样,这可能不仅仅是支持https上的POST。此外,这里的假设是,所发布的表单中没有任何机密信息。

如果您自己编写后端服务,则有一种方法可以做到这一点。假设您想使用前端服务fs1向s1发送HTTP请求

如果使用Spring,那么可以使用从fs1到Spring后端识别的“uri”的ajax调用,比如bs1。现在,服务bs1可以调用s1

图示:

代码:

$.ajax
({
类型:“POST”,
uri:/json/
数据:$('#Form')。序列化(),
成功:功能(响应)
{
//在这里处理成功
},
错误:函数(错误响应)
{
//在这里处理故障
}
})

标题与问题相矛盾。您是从HTTPS发布到HTTP还是HTTPS?错误信息至少与后者相矛盾。我相信你的问题是不正确的。假设你的意思是“一个HTTP”页面……不知道你为什么要这样做,你想做什么?它是不同的域,是强制ssl吗?谢谢,我修复了描述。如果你尝试使用ajax会发生什么?ajax不起作用(在页面底部创建一个警告),但是你可以绕过它,正如我建议的。为什么要投反对票?的确,这是不可能的,请看@sblom的帖子。说真的,否决票是怎么回事?这是不可能的。Stefan的建议是您唯一的选择,基本上是代理请求,但这不是发布到HTTP url,而是发布到HTTPS url,并将请求代理到HTTP。
$.ajax
({
 type: "POST",
 uri:/json/<methodName> 
 data: $('#Form').serialize(),
 success: function(response)
 {
  //handle success here
 },
 error: function (errorResponse)
 {
   //handle failure here
 }
})