2017-08-22 154 views
1

我想用scim服務刪除用戶。ajax DELETE方法不允許

當我把它通過了SoapUI和捲曲它的工作原理,但是當我創建Ajax調用返回405方法不被允許

SOAPUI5

IP: https://localhost:9447//wso2/scim/Users/token_of_user_to_be_deleted

的OAuth2令牌: my_token_for_oauth

介質類型:應用/ JSON

捲曲

捲曲-v -k --user管理:管理員-X DELETE https://localhost:9447/wso2/scim/Users/b228b59d-db19-4064-b637-d33c31209fae -H 「接受:應用/ JSON」

這兩個工作並刪除了用戶。

AJAX不工作FOR ME

  $.ajax({ 
        url: 'https://localhost:9447/wso2/scim/Users/token_of_user_to_be_deleted', 
        type: 'DELETE', 
        headers: { 'Content-Type':'application/json'}, 
        xhrFields: { 
         withCredentials: true 
        }, 

        beforeSend: function (request) { 
          request.setRequestHeader('Authorization', 'Bearer ' + that.oauth2.loadToken().access_token); 
        }, 


        success: function() { 
         console.log("success")       
        }, 
        error: function() { 
         console.log("error") 
        } 
       }); 

ERROR: 跨來源資源共享(CORS)過濾:不支持的HTTP方法:DELETE

+0

可能是你的網絡服務器需要添加相應的CORS標頭響應ajax調用。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS Ajax請求默認情況下不能執行與常規HTTP請求相同的功能,主要是出於安全原因。解決方案是在服務器上設置適當的響應頭以允許它,並且允許必要的HTTP方法(通常包括OPTIONS)。 – ADyson

回答

4

的瀏覽器擊中之前OPTIONS請求發送實際的請求。該請求包括公認的方法

Access-Control-Allow-Methods: GET, OPTIONS 

您的服務器不發送的選項響應DELETE接受的方法,因此您的請求拋出這個錯誤。

要解決此問題,您需要將DELETE添加到服務器接受的方法中。在您的服務器設置中

Access-Control-Allow-Methods: POST, GET, DELETE, OPTIONS 

選項請求僅在瀏覽器上發送,因爲它僅作爲安全措施由瀏覽器實現。 curl/node/SOAPUI5不會確認這個限制,因此可以讓你得到你想要的。 (除非服務器被配置以其它方式在內部,以防止某些標頭)

更新

如@jannis所提到的,這是值得注意的是,OPTIONS請求實際一個在前被稱爲預檢要求和一般的機構叫做CORS

您可以通過以下鏈接閱讀更多的預檢要求(和一般的CORS):

+1

值得注意的是,在實際之前的OPTIONS請求被稱爲預檢請求,並且通常稱爲CORS。您可以在預檢請求(以及一般CORS)[這裏](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests)和[here](https:// developer.mozilla.org/en-US/docs/Web/HTTP/Server-Side_Access_Control#Preflighted_requests) – jannis

+0

真棒,我會將它添加到答案。 – Bamieh

+0

非常感謝您的幫助@AhmadBamieh – dtechlearn

相關問題