【发布时间】:2016-07-11 13:22:58
【问题描述】:
我正在测试自己使用 C++ 和 Boost 库开发的 HTTP 服务器。更具体地说,我正在测试 PUT 接收 JSON 的端点。
为了测试 RESTFul 网络服务,我使用 Curl 和以下命令:
curl -H "Content-Type: application/json" -H "Content-Length: 34" -H "Connection: close" -X PUT --data "@response_json" http://localhost:8080/answer
其中 response_json 是一个包含要发送的 json 的文件。这工作正常,服务器将请求作为 PUT 接收并执行应该执行的操作。
但是,当我使用 AJAX 测试 Web 服务时:
function sendPut2() {
var http = new XMLHttpRequest();
var url = 'http://localhost:8080/answer';
var data = JSON.stringify({"question": "a", "answer": "b"});
http.open("PUT", url, true);
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Content-Length", data.length);
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() {
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(data);
}
服务器将其作为 OPTIONS 接收并且不起作用。此外,在 Firebug 控制台中,我可以看到:“NetworkError: 404 Not Found - http://localhost:8080/answer”。
我尝试过使用 Firefox 和 Chrome。我的 javascript 代码有什么问题?
这是来自 Javascript 的请求的 Firebug:
【问题讨论】:
-
确保你打的是同一个原点,如果不是,有两个选项。 1. 服务器必须使用 access-control-allow-origins 标头进行响应。 2.临时安装chrome cors插件
-
Chrome CORS 插件并没有真正解决 OPTIONS 的问题。在某些情况下,最好使用 chrome 的
--disable-web-security命令行选项进行测试。
标签: javascript json ajax http