2016-05-12 150 views
1

在我的應用程序,我使用,因爲在服務器端$ HTTP POST請求的所有PHP服務只接受POST請求。 PHP web服務位於godaddy。服務器塊POST但不GET請求?

一些連續$ 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); 
+0

如果安全Apache模塊處於活動狀態,那麼你不能做任何事情。您只能要求主機提供商設置更高的限制。 –

+0

@CharlotteDunois甚至沒有.htaccess文件? –

+0

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

回答

0

這是因爲跨域請求策略的。如果你想限制來自不在同一個域中的其他頁面的腳本,這將有助於這樣做。但是,在API的情況下會發生什麼,他們如何授權接受來自其他頁面的請求? 因此,要做到這一點,他們使用訪問控制的選項,並在您的特定情況下,訪問控制允許的方法必須被設置爲剛剛獲得方法。所以它基本上只接受GET請求。

但是如果你想專門使用POST請求,可以通過可以通過同源策略的CURL(和PHP或者其他一些服務器端語言),並且可以通過POST請求發送&接收數據。 You can have additional information about CURL here