【发布时间】:2013-11-30 01:38:16
【问题描述】:
我正在使用 Jersey 和 tomcat 编写我的第一个 Web 服务。我想使用 PUT 方法从使用 javascript 的网页上传文件。我注意到的是我的服务器没有收到 PUT 请求,而它似乎正在收到 GET 和 POST。这是我在服务器端的方法:
@PUT
@Path("myPut")
@Produces(MediaType.TEXT_PLAIN)
public String myPut() {
System.out.print("OK!");
return "OK!";
}
这是我在客户端写的代码:
function myFunction() {
var client = new XMLHttpRequest();
client.open("PUT", "http://localhost:8080/.../myPut", false);
client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
client.send("test");
}
如果我只是用 GET 或 POST(在客户端和服务器上)替换该方法,我会得到“OK!”响应字符串(并打印)。我也尝试了 curl 并且服务器似乎按照我的预期回答:
curl -X PUT -v http://localhost:8080/.../myPut
* Adding handle: conn: 0xc2eee0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0xc2eee0) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> PUT /.../myPut HTTP/1.1
> User-Agent: curl/7.32.0
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Content-Type: text/plain
< Content-Length: 3
< Date: Sat, 16 Nov 2013 17:45:36 GMT
<
* Connection #0 to host localhost left intact
OK!
我读了一点,似乎 PUT 应该适用于 Firefox 和 Chrome,这意味着我做错了什么(例如,here,PUT 明确在列表中;也来自第一个答案 @987654322 @我猜 PUT 应该可用)。有谁能指正吗?
如果这种方式完全错误/不可接受,您能否建议另一种技术来执行此操作(上传本地文件,可能允许我显示进度条)?
【问题讨论】:
-
AFAIK,浏览器通常不支持所有 REST 方法。
DELETE是另一个可能不受支持的示例。你有没有看到一些其他说明的文档? -
但是...developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest 似乎建议它应该在 open(...) 方法的定义中起作用。
-
@BlueSkies 所有浏览器在发送 xhr 请求时都支持所有方法。
-
我的网页是在浏览器中打开的本地html文件。它不是由服务器提供的。这可能与同源政策有关吗?
标签: javascript rest xmlhttprequest jersey