AJAX帖子不使用HTTPS

时间:2012-10-17 20:59:56

标签: ajax jquery

我对jquery post函数有一个相当令人沮丧的问题,可能源于不了解它是如何正常工作的。

我有一个函数,应该将一些表单信息发布到我编写的php脚本,然后该脚本运行针对API的curl请求以绕过javascript的跨域策略。它似乎工作正常,只要它提交“http”,但当我发送到“https”时,表单永远不会被提交。

我在计算机上运行wireshark,它显示没有流向目标IP的流量,直到我使用http。我在服务器上有基本身份验证,所以我通过网址传递用户和密码,但没有测试就得到了相同的结果。

以下是无效代码:

$j.post("https://<api user>:<password>@<ip>:444/ProxyScript.php", 
         $j("#spoke_ticket").serialize(),
         function(msg) { 
              log_status(msg);
              fade_status();
              $j(':input','#createtheticket')
                   .not(':button, :submit, :reset, :hidden')
                   .val('')
                   .removeAttr('checked')
                   .removeAttr('selected');
               });

这是工作职能:

$j.post("http://<other ip>/ProxyScript.php",  
        $j("#spoke_ticket").serialize(),
        function(msg) { 
              log_status(msg);
              fade_status();
              $j(':input','#createtheticket')
                   .not(':button, :submit, :reset, :hidden')
                   .val('')
                   .removeAttr('checked')
                   .removeAttr('selected');
               });

关于为什么没有发送流量的任何想法? 如果我遗漏了一些重要信息或其他任何内容,请告诉我。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

如果您正在从http页面到https URL执行AJAX帖子,那么跨域策略就会启动,因为该协议也是原始规范的一部分,如here所述。浏览器将拒绝拨打AJAX电话,这就是为什么你没有看到任何流量。

这里讨论一个解决方案:

Ajax using https on an http page

所以你最好的选择是Access-Control-Allow-Origin标题,现在大多数现代浏览器都应支持它。

因此,请让您的服务器在响应中添加以下标头:

Access-Control-Allow-Origin: https://www.mysite.com

如果由于某种原因你无法强制执行此操作,那么剩下的唯一选择就是JSONP

答案 1 :(得分:0)

为什么不使用代理来克服跨域问题?听起来更容易。一个简单的例子是当我想要为各县,道路名称等检索丹麦政府国家地理数据时(幸运的是,他们的数据是json或XML可选)

简化proxy.php

<?
header('Content-type: application/json');
$url=$_GET['url'];
$html=file_get_contents($url);
echo $html;
?>

在ajax中,获取县边界的纬度/长度

var url= "proxy.php?url=https://geo.oiorest.dk/"+type+"/"+nr+"/graense.json";           
$.ajax({
  url: url,
  dataType: 'json',
  success:  function (data) {
   ...

}); 

注意https - 网址可以是,例如,https://geo.oiorest.dk/kommuner/0810/graense.json