2016-05-12 12 views
1

私のアプリの中では、サーバー側ですべてのPHPサービスが投稿要求を受け付けるだけなので、私は$ http投稿要求を使用します。 PHP Webサービスはgodaddyにあります。サーバはPOSTではなくGET要求をブロックしますか?

いくつかの連続した$ http投稿要求(通常は10-20要求後)の後、私はサーバーからERR_EMPTY_RESPONSEを取得し始めます。私はいくつかの調査を行い、これがサーバからのセキュリティ問題が攻撃を防ぐためであることが判明しました。 Apacheサーバーのmod_sec設定はこの問題を引き起こしますが、私はそれを上書きする権限を持っていません。

この問題が具体的にPOST要求によって引き起こされたかどうかをテストすることにしました。だから私は簡単なPHPファイルとAngularJSテストスクリプトを書いた。 GET要求を使用すると、ERR_EMPTY_RESPONSEエラーは発生しません。サーバー側でPOST要求をブロックしないように、クライアントサイドのAngularJSまたは.htaccessファイルに置くことができるApacheサーバー設定の$ http 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

セキュリティapacheモジュールがアクティブな場合は、何もできません。ホストプロバイダに限度を設定するよう依頼することができます。 –

+0

@CharlotteDunois .htaccessファイルでもありませんか? –

+0

http://stackoverflow.com/a/12928404/3885509 –

答えて

0

これは、クロスドメイン要求ポリシーです。同じドメインにない他のページからスクリプトを制限したい場合は、これを実行するのに役立ちます。しかし、APIの場合はどうなりますか?他のページからのリクエストを受け入れる権限をどのように与えていますか。 これを行うには、Access-control-OPTIONSを使用し、特定のケースではAccess-Control-Allow-MethodsがGETメソッドに設定されている必要があります。したがって、基本的にGET要求のみを受け入れます。

しかし、特にPOST要求を使用する場合は、同じ起点ポリシーを渡すことができるCURL(PHPまたはその他のサーバー側言語を使用)を使用し、&にPOST要求でデータを送信できます。 You can have additional information about CURL here

関連する問題