2016-04-02 92 views
7

我正在使用球衣作爲我的restful API實現。在前端,我使用angularjs $ http服務發出http請求。當我請求刪除方法時,我總是得到錯誤。總是得到方法DELETE不允許通過預檢響應中的訪問控制 - 允許 - 方法

"Method DELETE is not allowed by Access-Control-Allow-Methods in preflight response." 

我看了一些文章,他們說我需要允許刪除「Access-Control-Allow-Methods」。我已經設置瞭如下的響應過濾器,但它仍然存在這樣的問題。我還應該做什麼?下面

@Provider 
public class CORSResponseFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { 
     MultivaluedMap<String, Object> headers = responseContext.getHeaders(); 

     headers.add("Access-Control-Allow-Origin", "*"); 
     headers.add("Access-Control-Allow-Methods", "*"); 
    } 
} 

是我的角碼發出請求:

$http({ 
      method: 'DELETE', 
      url: remoteUrl, 
      headers : {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8', 
       'ACCESS_TOKEN' : $cookieStore.get("access_token") 
      }, 
      data : $httpParamSerializer({ 
       'id':id 
      }) 
     }).success(function(data,status,headers,config) { 
      $scope.refreshDepartments(); 
      console.log(data); 
      alert("success"); 
     }).error(function(data,status,headers,config){ 
      console.log(data); 
      alert("error"); 
     }); 
+0

您是否在'web.xml'或應用程序類中註冊了提供程序? – Casey

+0

我使用的是spring-boot,它適用於GET,POST等其他方法。只有在DELETE –

回答

12

經過一番測試,我找到了解決方案。我將下面的allow方法放在頭上,然後它就可以工作。我不知道爲什麼「*」不起作用。

headers.add("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE"); 
+0

其實我遇到了同樣的問題,但看了一下文檔https://www.w3.org/TR/cors/#access-control-allow-methods-response-header後,我不知道如何可以認爲「*」可以用於allow-methods頭。 – JepZ

0

嘗試使用CORS Chrome擴展程序,它幫助我一次。

編輯

這是因爲角度增加了X標頭鍵在您的請求頭。

X-頭一般定義或設置運行參數的HTTP請求/ RES

您可以通過修改您的要求的內容類型,以解決這個問題「text/plain的」「application/x-www-form-urlencoded」「multipart/form-data」

您可以在應用程序配置中使用攔截器來做到這一點。

編輯

添加到您的服務器代碼 -

header('Access-Control-Allow-Headers: X-Requested-With'); 

嘗試改變內容類型text/plain的

希望這有助於。

+0

上失敗但它不能解決其他瀏覽器的問題嗎? –

+0

事情是,在生產環境中,你可能不會遇到這個問題..有一個非常簡單的解決方法,但是告訴我它現在是否在chrome中工作? – atefth

+0

不幸的是,它不起作用。但你爲什麼說我不會在生產環境中遇到這樣的問題? –

相關問題