服务器阻止POST但不阻止GET请求?

时间:2016-05-12 10:06:57

标签: javascript php angularjs post get

在我的应用程序中,我使用$ http post请求,因为在服务器端,所有PHP服务只接受post请求。 PHP Web服务位于godaddy。

在连续的$ http发布请求之后(通常在10-20请求之后),我开始从服务器获取ERR_EMPTY_RESPONSE。我做了一些研究,发现这是因为服务器出现安全问题以防止攻击。 Apache服务器的mod_sec设置会导致此问题,但我没有权限覆盖它。

我决定测试一下,如果这个问题是由POST请求专门引起的。所以我写了一个简单的PHP文件和AngularJS测试脚本。如果我使用GET请求,我不会收到任何ERR_EMPTY_RESPONSE错误。在客户端AngularJS或任何Apache服务器设置上是否有任何$ http POST设置我可以放在.htaccess文件中,所以服务器不会阻止POST请求?

PHP脚本:

<?php 
       echo json_encode(array("item"=>"dummy test service."));
 ?>

AngularJS脚本:

var success_count = 0;
var method = 'GET'; //try 'POST' and you will get ERR_EMPTY_RESPONSE
stop = $interval(function() {
    $http({
        method : method,
        url : 'test.php'
    }).then(function successCallback(response) {
        console.log(success_count);
        success_count++;
    }, function errorCallback(response) {
        console.log("error after "+success_count+" successful request.");
        success_count = 0;
    });
}, 200);

1 个答案:

答案 0 :(得分:0)

这是因为跨域请求策略。如果要限制来自不在同一域中的其他页面的脚本,这将有助于这样做。但是在API的情况下会发生什么,他们如何允许接受来自其他页面的请求? 为此,他们使用Access-control-OPTIONS,在您的特定情况下,Access-Control-Allow-Methods必须设置为GET方法。所以它基本上只接受GET请求。

但是如果你想专门使用POST请求,可以使用CURL(使用PHP或其他服务器端语言),它可以通过同源策略,并且可以发送&amp;通过POST请求接收数据。You can have additional information about CURL here

相关问题