2012-04-10 46 views
0

對於我正在開發的Web API,我想做類似於Facebook Graph API的操作。用戶可以邀請其他用戶。要接受或拒絕邀請,其他用戶需要做一個空的POST到:是否允許POST空數據?

/invitation/<invitationId>/accepted 

/invitation/<invitationId>/rejected 

然而,這不是爲我工作的,當我張貼的空數據,PHP (?或Apache)返回以下錯誤:

Request entity too large!

The POST method does not allow the data transmitted, or the data volume exceeds the capacity limit.

顯然,因爲POST數據是空的(在Firebug我雙重檢查),這是不正確的。所以我的問題是:

  • HTTP協議是否允許POST空數據?如果不是,我想我只會發布一些虛擬數據,但我寧願避免這種黑客攻擊。

  • 如果它允許,我該如何讓Apache/PHP允許請求?

+0

爲什麼你根本不在POST並且沒有鏈接到那個頁面?如果你需要'form action =「」''和'

+0

是的,它允許發送一個空的$ _POST,但是,這樣做有意義嗎? – Lobo 2012-04-10 07:02:14

+0

爲什麼不將API實現爲GET請求?例如,使用JavaScript與JSONP一起使用可能會更容易,如果您不需要發送任何數據,GET就是要走的路。 – Yaniro 2012-04-10 07:02:34

回答

0

POST請求我猜你想要做某種REST的API,以及這就是爲什麼你需要發送後沒有數據。

的Apache/PHP應該讓你發送空後的數據,這些限制必須由該構架的一些服務器配置使用的是

你可以用這個簡單的文件來測試這個規定:

<?php 

echo '<h2>This page was requested using ' . $_SERVER['REQUEST_METHOD'] . '</h2>'; 
echo '<pre>'; 
print_r($_POST); 
echo '</pre>'; 
?> 
<form action="" method="post"> 
    <input type="submit" value="Request this page using POST" /> 
</form> 

即使_POST數組是empy,你也將看到腳本檢測到post請求(使用來自_SERVER超全局的REQUEST_METHOD)

-1

你爲什麼要做POST請求?如果發送數據或不發送數據,則檢測API,如果沒有數據,則發出GET請求。事實上,在大多數情況下,請求GET請求的效率要高得多,因爲瀏覽器可以更輕鬆地緩存這些信息(並且可以通過發送緩存專用標頭來使API靈活地利用該請求)。

有沒有點使你的情況:)

+0

謝謝,但這並沒有真正回答這個問題。我認爲就像@GordonM那樣,GET查詢不應該修改系統中的任何內容。此外,我不希望緩存請求,因爲它修改數據。儘管我完全明白你的觀點,但這不是真正的問題。讓我們假設我有一個很好的理由發送一個空的POST數據:)問題是:它可以完成嗎?如果是這樣,爲什麼PHP拒絕這個請求? – 2012-04-10 07:48:08