我正在尝试使用 scim 服务删除用户。
当我通过 SoapUI 调用它并 curl 它时它工作但是当我创建 ajax 调用时它返回 405 方法不允许
SOAPUI5
IP: https://localhost:9447//wso2/scim/Users/token_of_user_to_be_deleted
OAUTH2 token : my_token_for_oauth
媒体类型:application/json
curl
curl -v -k --user admin:admin -X DELETE https://localhost:9447/wso2/scim/Users/b228b59d-db19-4064-b637-d33c31209fae -H "接受:应用程序/json"
这既有效又删除了用户。
AJAX 不适合我
$.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")
}
});
错误: 跨源资源共享 (CORS) 过滤器:不支持的 HTTP 方法:DELETE
最佳答案
浏览器在发送实际请求之前确实命中了一个OPTIONS
请求。此请求包括接受的方法
Access-Control-Allow-Methods: GET, OPTIONS
您的服务器不会在选项响应中发送 DELETE
接受方法,因此您的请求会抛出此错误。
要解决此问题,您需要将DELETE
添加到服务器接受的方法中。在您的服务器设置中
Access-Control-Allow-Methods: POST, GET, DELETE, OPTIONS
选项请求仅在浏览器上发送,因为它仅由浏览器作为安全措施实现。 curl/node/SOAPUI5 不确认此限制,因此可以让你得到你想要的。 (除非服务器在内部配置为阻止某些 header )
更新
正如@jannis 所提到的,值得注意的是,实际请求之前的OPTIONS
请求称为预检请求,该机制通常称为CORS.
您可以通过以下链接阅读更多预检请求(以及一般的 CORS):
关于javascript - 不允许使用 ajax DELETE 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45819091/