RESTful api - 跨域请求问题

时间:2015-06-22 15:09:45

标签: php rest request cross-domain put

我好久不见了,终于报到了。 我经历了大量的线程,但没有人可以帮我解决我的问题。 我即将使用php中的slim框架创建一个RESTful API,并且在跨域放置请求方面存在问题。

让我快速介绍一下我所做的事情。 在考虑了第一个GET请求后,我正在寻找一种方法来轻松测试我的API,并找到了“RESTClient”Firefox插件,它运行良好,所以我继续使用它。 经过几次测试后,我在另一台服务器上测试了一个自编代码,并且出现了问题。

  

阻止跨源请求:同源策略禁止读取%1 $ S处的远程资源。 (原因:CORS预检频道没有成功)。

我最想知道的是, Firefox插件在任何时候都没有问题,它始终显示预期的响应。当我尝试通过自己的代码发送请求时,上面的错误就发生了。我读了很多关于跨源请求的内容,但没有任何帮助,我希望你能。

现在首先让我向您展示我的超薄框架PHP代码

<?php
header('access-control-allow-origin: *');
header('Content-Type: application/json');

function output($arr){
    echo json_encode($arr);
    exit;
}

require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();

$app->put(
    '/put',
    function () {
        $output = array("status"=>"200","message"=>"This is a put test");
        output($output);
    }
);

$app->run();
?>

我的test.html

<html>
    <head>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
        <script type="text/javascript">

            (function($) {
                    var url = 'URL';

                    $.ajax({
                    type: 'put',
                    url: url,
                    async: false,
                    crossDomain:true,
                    dataType: 'json',
                    success: function(json) {
                       console.log(json);
                    },
                    error: function(e) {
                       console.log(e.message);
                    }
                });

            })(jQuery);

        </script>
    </body>
</html>

有人可以向我解释如何让这个PUT请求正常工作。我现在真的处于这种绝望的情绪中。我理解所有跨域主题,但为什么在我在php代码中设置access-control-allow-origin之后他不放手?什么是firefox插件做的不同? ......

1 个答案:

答案 0 :(得分:1)

您似乎忘了在标题中添加方法。1

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');