1

我将 GWT 与 Restlet 一起使用,并希望将删除发送到我的 Restserver。这是我发送的客户代码:

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]

我已经在这里找到了一个帖子:浏览器在更改 http 标头后发送选项而不是帖子,但这并不能解决我的问题。对于 POST 和 GET,它可以工作,但只能使用 Firefox 插件来解决 SOP 问题,也可以添加新标头,但添加 PUT、DELETE 和 OPTIONS 并不能解决此问题。

有谁知道这个的解决方案,提前谢谢

编辑

我在服务器端尝试过这样的事情,但他仍然带有 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);
    }
4

1 回答 1

3

在 CORS 请求的情况下,发送 OPTION 请求是预期的行为。您可以在 Restserver 中为 OPTIONS 添加处理程序。

您将需要返回有效的 Access-Control-Allow-OriginAccess-Control-Allow-Methods。然后客户端将发送第二个请求(在您的情况下为 PUT 或 DELETE)。

于 2013-05-19T21:01:19.850 回答