【问题标题】:Serving http content on https website在 https 网站上提供 http 内容
【发布时间】:2015-12-10 20:24:46
【问题描述】:

我目前正在尝试在我的大学服务器上托管我的网站,当我访问它时它被用作 https 但是当我的网站中的 RSS 内容托管在大学服务器上时不会显示,因为引用的 RSS 提要使用http.

我目前遇到的错误如下:

Mixed Content: The page at '<uni website address>' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://rss2json.com/api.json?rss_url=http%3A%2F%2Ffeeds.feedburner.com%2Fdaily-express-news-showbiz'. This request has been blocked; the content must be served over HTTPS.

有什么方法可以让 http 内容在 https 网站上运行?

我无法更改任何服务器设置,以防万一有人建议作为解决方案。

我还检查了这个问题一个类似的问题,但对我的问题没有帮助:Dealing with HTTP content in HTTPS pages

接受的答案对我没有帮助的原因是因为我不知道如何像他们建议的那样重写 URL,也不知道在哪里创建代理页面/servlet(以及如何创建它们)。

我正在使用的一个 http URL 的示例是

http://rss2json.com/api.json?rss_url=http%3A%2F%2Ffeeds.bbci.co.uk%2Fnews%2Fworld%2Frss.xml

【问题讨论】:

  • (希望)您无法在 https 中执行请求。如果 rss 提要仅由 http 提供,那么您需要一些代理作为连接器。通常这是某种代理。所有 http 服务器都可以这样做,但显然我们不能说您的服务器提供什么以及您拥有什么权限。您应该询问服务器管理员您对此有哪些选择。

标签: http https rss


【解决方案1】:

所以我最终通过创建一个我认为充当代理的 PHP 脚本来完成这项工作,这样我就可以接收我想要显示的提要。这是我创建的其中一个 php 脚本的示例。

bbc_home.php

<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
header("Content-Type: text/xml");
?>
<?php
function get_url_contents($url){
  $crl = curl_init();
  $timeout = 5;
  curl_setopt ($crl, CURLOPT_URL,$url);
  curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
  $ret = curl_exec($crl);
  curl_close($crl);
  return $ret;
}
$url = "http://rss2json.com/api.json?rss_url=http%3A%2F%2Ffeeds.bbci.co.uk%2Fnews%2Fworld%2Frss.xml";
$str = file_get_contents($url);
echo $str;
?>

我的 JS 文件片段

function bbcHomeNews() {
   var xhr = new XMLHttpRequest();
   xhr.onreadystatechange = function(){
           if (xhr.readyState==4 && xhr.status==200)
           {
               var data = JSON.parse(xhr.responseText);
               if(data.status == 'ok'){
                   var dataItemLength = data.items.length;
                   itemAmount = 4;
                   for(var i=0;i<itemAmount;++i){
                        $("#newsFeedContent").append("<div class='panel' id='bbcNewsContent'>" +
                        "<h2>" + data.items[i].title + "</h2>" +
                          "<div>" + data.items[i].description + "</div>" +
                          "<br>" +
                          "<button class='btn btn-default'><a href=" + data.items[i].link + ">More</a></button>" +
                        "</div>");
                      }
               }
               if(data.status == 'error'){
                 returnErrorMessage("BBC Feed");
               }
           }
       };
   xhr.open('GET','scripts/php/bbc_home.php',true);
   xhr.send();
}

我希望这对遇到类似问题的人有所帮助!

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多