将CORS HTTP转换为HTTPS

问题描述

我对其他网站的AJAX请求有问题。 当我将Http调用到Http时没有问题。但是,当我从HTTP呼叫到HTTPS时,出现如下错误消息:

从“ https://www.mywebsideserver.pl/test.PHP”访问XMLHttpRequest 来源“ http://mywebsideclient.com”已被CORS政策阻止:否 请求中出现“ Access-Control-Allow-Origin”标头 资源。 klientcors.PHP:77 jquery.min.js:2 POST https://www.mywebsideserver.pl/test.php净:: ERR_Failed

这些是客户端标头。

enter image description here

这是我的客户端代码

<script type="text/javascript">

testCORS();
    function testCORS() {
        $.ajax({
          url: 'https://www.mywebsideserver.pl/test.PHP',type: 'POST',//dataType: 'html',data:{},crossDomain: true,success: function (data,textStatus,xhr) {
            alert(data);
          },error: function (xhr,errorThrown) {
            console.log(errorThrown);
          }
        });
    }   
</script>

和服务器端简单代码

<?PHP
header('Access-Control-Allow-Origin: *');
$myArr = array("xx1","xx2","xx3","xx4");

$myJSON = json_encode($myArr);


echo $myJSON;
?>

需要在htaccess,客户端代码或服务器端代码添加一些内容吗?

解决方法

解决这个问题的一种方法是在发出Ajax请求之前决定使用哪种协议(取决于当前协议)。例如,如果用户将访问https://www.mywebsideserver.pl,则您的ajax网址应为

https://www.mywebsideserver.pl/test.php

如果用户访问http://www.mywebsideserver.pl,则ajax网址应为

http://www.mywebsideserver.pl/test.php

您可以这样更改代码:

$is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;

$protocol = $is_https ? 'https' : 'http';

现在,您可以使用$protocol变量来构建您的网址,如下所示:

<script type="text/javascript">

testCORS();
    function testCORS() {
        $.ajax({
          url: '<?php echo $protocol ?>://www.mywebsideserver.pl/test.php',
,

是的,这就是使用CORS的原因,对安全网站的API请求只能由另一个安全网站完成。因此,使用该网站的HTTP无法将请求发送到HTTPS网站。您可以详细了解here。 HTTPS网站可以对此例外,方法是在其网站上添加“ Access-Control-Allow-Origin”标头,说
“嘿,由于我是他的朋友,所以该HTTP网站可以访问我的HTTPS网站,将例外”。进一步了解here