在我的应用程序中,我使用$ 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);
答案 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