2013-05-19 2 views
1

Я использую GWT с Restlet и хочу отправить удаление на мой Restserver. Это мой код клиента для отправки:Браузер отправляет OPTIONS вместо PUT или DELETE

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(); 
} 

Но когда я хочу, чтобы проверить это мой Firefox говорит:

[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 не решает эту проблему.

Кто-нибудь знает решение этой, заранее спасибо

EDIT

Я пытался что-то вроде этого на ServerSide, но он по-прежнему поставляется с 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

Отправка OPTION REQ Ожидается, что поведение ожидается в случае запроса CORS. Вы можете добавить обработчик OPTIONS в свой Restserver.

Вам нужно будет возвращать действительный Access-Control-Allow-Origin и Access-Control-Allow-Methods. Затем клиент отправит второй запрос (PUT или DELETE в вашем случае).

+0

Я пробовал это, но он не работает, это все еще http 405 – pfu

+1

Проблема в том, что ваш http: // localhost: 8182/recipe/35 не имеет обработчика запроса OPTIONS (я предполагаю, что у него есть обработчики для GET и УДАЛИТЬ). Легкий способ - создать глобальный обработчик на сервере для всех запросов OPTIONS независимо от пути или создать обработчик OPTIONS для/recipe/35. – YoK

+0

Вы правы, это очень просто. Я просто добавил над аннотацией «Удалить» аннотацию «Параметры», теперь она работает. Огромное спасибо! – pfu

Смежные вопросы