我将 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 方法不允许 3ms]
我在这里找到了一个帖子:browsers send Options instead of Post after changing http header但这并不能解决我的问题。对于 POST 和 GET 它可以工作,但只能与 Firefox Addon 一起解决 SOP 的问题,也可以添加新的 header ,但是添加 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);
}
最佳答案
在 CORS 请求的情况下,发送 OPTION 请求是预期的行为。您可以在 Restserver 中为 OPTIONS 添加处理程序。
您需要返回有效的 Access-Control-Allow-Origin 和 Access-Control-Allow-Methods。然后客户端将发送第二个请求(在您的情况下为 PUT 或 DELETE)。
关于java - 浏览器发送 OPTIONS 而不是 PUT 或 DELETE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16639311/