2013-05-19 2 views
1

GWT를 Restlet과 함께 사용하고 있고 Restsver에 삭제를 보내려고합니다. 이 보내는 내 클라이언트 코드입니다 :브라우저가 PUT 또는 DELETE 대신 OPTIONS을 전송합니다.

private void recipeDeleteButton() { 
    String id = views.getViewRecipeDetail().getRecipeId().getText(); 
    ClientResource res = new ClientResource(Rest.RECIPE_CLIENT_RESOURCE_LOCAL + id); 
    res.setOnResponse(new Uniform() { 

     @Override 
     public void handle(Request request, Response response) { 
      System.out.println(response.getStatus().getDescription()); 
     } 

    }); 
    res.delete(); 
} 

하지만이 검사 할 때 내 파이어 폭스는 말한다 : 나는 이미 포스트 여기 발견

[22:28:28.796] OPTIONS http://localhost:8182/recipe/35 [HTTP/1.1 405 Method Not Allowed 3ms]

: browsers send Options instead of Post after changing http header하지만이 해결되지 않는 내 문제. POST와 GET을 위해서는 작동하지만 Firefox Addon에서만 SOP 문제를 해결할 수 있습니다. 새로운 헤더를 추가 할 수도 있지만 PUT, DELETE 및 OPTIONS를 추가해도이 문제는 해결되지 않습니다.

사전에 이에 대한 해결책은 감사

편집

나는 서버 측에이 같은 시도했지만, 그는 여전히 OPTION의 REQ 전송 (405)

Series<Header> responseHeaders = (Series<Header>) getResponse().getAttributes().get("org.restlet.http.headers"); 
    if (responseHeaders == null) { 
     responseHeaders = new Series<Header>(Header.class); 
     responseHeaders.add(new Header("Access-Control-Allow-Origin", "*")); 
     responseHeaders.add(new Header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS")); 
     getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders); 
    } 

답변

3

와 함께 제공 uest는 CORS 요청의 경우 예상되는 동작입니다. Restserver에 OPTIONS에 대한 핸들러를 추가 할 수 있습니다. 당신은 유효한 액세스 제어 - 허용 - 원산지반환해야합니다

액세스 제어는-허용-방법을. 그러면 클라이언트는 두 번째 요청 (PUT 또는 DELETE)을 보냅니다.

+0

나는 그것을 시도했지만 작동하지 않는다, 여전히 http 405 – pfu

+1

문제는 http : // localhost : 8182/recipe/35에 OPTIONS 요청에 대한 핸들러가 없다는 것이다. (나는 GET을위한 핸들러가 있다고 가정한다. 지우다). 쉬운 방법은 경로에 관계없이 모든 OPTIONS 요청에 대해 서버에서 전역 처리기를 만들거나/recipe/35에 대한 OPTIONS 처리기를 만드는 것입니다. – YoK

+0

당신은 맞습니다. 정말 그렇게 간단합니다. 방금 주석 주석 위에 Option Annotation을 추가했습니다. 매우 감사합니다! – pfu

관련 문제