2013-06-21 127 views
1

當用戶單擊按鈕時,會調用以下函數。jquery-ajax DELETE請求拋出403訪問被拒絕錯誤

function clearTable() { 
    $.ajax({ 
     url: 'cleartable.php', 
     type: 'DELETE', 
     success: function(result) {} 
    }); 
} 

這工作我想它在我的本地服務器上測試的方式,即clearTable()調用cleartable.php,這又確實TRUNCATE TABLE tablename

然而,當我在我的遠程服務器上運行它,Chrome的JavaScript控制檯我打印錯誤消息:

DELETE URL_TO_MY_REMOTE_SERVER/cleartable.php 403(拒絕訪問) jQuery的1.9.1.min。 JS:5

一種解決方法是改變typePOSTGET,然後它會全成調用PHP。但是,我想知道是什麼導致DELETE請求失敗。它適用於我的本地主機,那爲什麼它不在我的遠程服務器上工作呢?此外,基於REST,請求類型變爲DELETE更有意義,因爲我正在刪除服務器上的某些內容,對吧?

+1

當你將它發送到遠程服務器時,我猜測它違反了[同源策略](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript)。 –

+0

檢查服務器配置。例如apache'mod_security'模塊可能會過濾某些類型的請求。 – claustrofob

回答

0

首先 - 我的答案是基於我對Apache的經驗,儘管它可能與其他服務器軟件相關。

我遇到了同樣的問題與客戶端的網站,似乎在他們的httpd.conf文件中的相關VirtualDirectory條目拒絕DELETE請求,因此403 Forbidden錯誤。

我仍然在等待他們的回覆,看看是否允許DELETE請求解決了這個錯誤,但是我認爲我會在這裏發佈我的發現,希望它能解釋你所看到的。

+0

我也面臨同樣的問題。有什麼方法可以解決這個問題嗎,因爲我可以完全訪問服務器? –

+0

如果你有完整的訪問權限,並且還沒有檢查你的.conf文件,我建議首先確保該站點的VirtualDirectory條目允許DELETE請求。請記住,您需要在進行這樣的更改後重新啓動Apache。 –

+0

我嘗試了很多解決方案,建議允許DELETE請求但沒有爲我工作。我正在使用laravelphp5,它使用symphony組件並能夠使用POST並在請求正文中指定API方法。參考 - http://laravel.io/forum/02-20-2014-sending-a-delete-request-via-ajax。這就是我解決問題的方法。我知道這是一個服務器配置,無法修復它。 Addl info:我在AWS EC2上使用Ubuntu 14.04和LAMP堆棧。 –

相關問題