【问题标题】:RESTful api - cross domain put request issueRESTful api - 跨域放置请求问题
【发布时间】:2015-06-22 15:09:44
【问题描述】:

我是一个很长一段时间的溢出者,最终注册了。 我经历了很多线程,但没有一个可以帮助我解决我的问题。 我即将在 php 中使用 slim 框架创建一个 RESTful API,并且在跨域 put 请求时遇到问题。

让我简要介绍一下我所做的工作。 在编写了第一个 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插件有什么不同? ...

【问题讨论】:

  • Firefox 扩展不必遵循同源策略,任何在页面上运行的 javascript 都可以。问题可能是由于设置了async: false,尝试将其设置为true,看看会发生什么。
  • 感谢您的帮助,但这并不能解决问题,与以前相同的错误
  • 尝试将以下代码放入 ajax.... contentType: 'application/x-www-form-urlencoded',

标签: php rest request cross-domain put


【解决方案1】:

好像忘记在表头添加方法了。1

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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2014-08-04
    • 2023-03-12
    • 2020-02-10
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多