在我的应用程序中,我使用 $http post 请求,因为在服务器端所有 PHP 服务仅接受 post 请求。 PHP Web 服务位于 godaddy。
经过一些连续的 $http post 请求(通常在 10-20 个请求之后),我开始从服务器收到 ERR_EMPTY_RESPONSE。我做了一些研究,发现这是因为服务器防止攻击的安全问题。 Apache 服务器的 mod_sec 设置导致此问题,但我无权覆盖它。
我决定测试一下这个问题是否是由 POST 请求引起的。所以我写了一个简单的 PHP 文件和 AngularJS 测试脚本。如果我使用 GET 请求,我不会收到任何 ERR_EMPTY_RESPONSE 错误。客户端 AngularJS 上是否有任何 $http POST 设置或我可以放置在 .htaccess 文件中的任何 Apache 服务器设置,以便服务器不会阻止 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);
最佳答案
这是因为跨域请求策略。如果您想限制来自不在同一域的其他页面的脚本,这将有助于做到这一点。但是对于 API 来说会发生什么,它们如何授予接受来自其他页面的请求的权限? 因此,要执行此操作,他们使用 Access-control-OPTIONS,并且在您的特定情况下,Access-Control-Allow-Methods 必须设置为仅 GET 方法。所以它基本上只接受 GET 请求。
但是,如果您想专门使用 POST 请求,请使用 CURL(使用 PHP 或其他服务器端语言),它可以绕过同源策略,并可以通过 POST 请求发送和接收数据。 You can have additional information about CURL here
关于javascript - 服务器阻止 POST 但不阻止 GET 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183687/