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

标签 javascript php angularjs post get

在我的应用程序中,我使用 $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/

相关文章:

php - 动态调查应用程序数据库结构

PHP system() mysqldump 使我的页面没有响应

PHP Plesk - php 错误日志文件丢失

javascript - 如何以一般方式处理 'Possibly unhandled rejection: backdrop click'

javascript - AngularJS - 从 .NET Controller 生成 View 只执行一次

javascript - Angular $http.post 不发送任何数据

javascript - 将多部分表单(输入类型=文件)转换为WordPress媒体库上传

javascript - querySelector 与 getElementById

javascript - Meteor.js - 如何在登录时重新呈现模板

javascript - CSS div 标签继承表格行的尺寸