2016-05-12 9 views
1

In meiner App verwende ich HTTP-Anfragen, da auf der Serverseite alle PHP-Dienste nur Post-Anfragen akzeptieren. PHP-Webdienste befinden sich in godaddy.Server blockiert POST, aber keine GET-Anfragen?

Nach einigen aufeinanderfolgenden http http Post-Anfragen (in der Regel nach 10-20 Anfrage), bekomme ich ERR_EMPTY_RESPONSE vom Server. Ich habe einige Nachforschungen angestellt und festgestellt, dass dies auf ein Sicherheitsproblem des Servers zurückzuführen ist, um Angriffe zu verhindern. Apache Server mod_sec Einstellung verursacht dieses Problem, aber ich habe keine Berechtigungen, es zu überschreiben.

Ich entschied mich zu testen, ob dieses Problem speziell durch POST-Anfragen verursacht wird. Also schrieb ich eine einfache PHP-Datei und ein AngularJS-Testskript. Wenn ich GET-Anfrage verwende, bekomme ich keine ERR_EMPTY_RESPONSE Fehler. Gibt es auf der Client-Seite AngularJS irgendwelche $ http POST-Einstellungen oder irgendeine Apache-Server-Einstellung, die ich in .htaccess-Datei platzieren kann, so blockiert der Server POST-Anfragen nicht?

PHP-Skript:

<?php 
     echo json_encode(array("item"=>"dummy test service.")); 
?> 

AngularJS Skript:

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

Wenn ein Sicherheits-Apache-Modul aktiv ist, können Sie nichts dagegen tun. Sie können den Host-Anbieter nur bitten, das Limit höher zu setzen. –

+0

@CharlotteDunois nicht einmal mit einer .htaccess-Datei? –

+0

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

Antwort

0

Dies ist wegen der Cross-Domain-Anforderungsrichtlinie. Wenn Sie Skripts von anderen Seiten einschränken möchten, die sich nicht auf derselben Domäne befinden, hilft dies dabei. Aber was passiert im Fall von APIs, wie erteilen sie die Erlaubnis, Anfragen von anderen Seiten zu akzeptieren? Dazu verwenden sie Access-control-OPTIONS und in Ihrem speziellen Fall müssen Access-Control-Allow-Methoden auf die Methode GET gesetzt sein. Also akzeptiert es grundsätzlich nur GET-Anfragen.

Wenn Sie jedoch speziell POST-Anfragen verwenden möchten, verwenden Sie CURL (mit PHP oder einer anderen serverseitigen Sprache), die dieselbe Ursprungsrichtlinie umgehen können und & empfangen Daten über POST-Anfrage senden können. You can have additional information about CURL here