【问题标题】:Server blocks POST but not GET requests?服务器阻止 POST 但不阻止 GET 请求?
【发布时间】:2016-09-08 02:20:12
【问题描述】:

在我的应用程序中,我使用 $http 发布请求,因为在服务器端,所有 PHP 服务只接受发布请求。 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);

【问题讨论】:

  • 如果安全 apache 模块处于活动状态,那么您将无能为力。您只能要求主机提供商将限制设置得更高。
  • @CharlotteDunois 甚至没有 .htaccess 文件?
  • 是的,我尝试了 mod_sec .htaccess 设置。但由于权限,它在我的情况下不起作用。

标签: javascript php angularjs post get


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2019-01-18
    • 2017-06-06
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多