我正在开发离子混合移动应用并试图在JSON-RPC服务中发布数据,但我收到“ 500内部服务器错误”
var req = {
url: 'http://192.118.1.214:8080/remote/json-rpc',
headers: {
'content-type': 'application/json;charset=utf-8',
'cache-control': 'no-cache, no-store, must-revalidate, max-age=0'
},
data: { jsonrpc: "2.0", id: 2, method: "HDAccess/getDevices", params: [null] }
}
$http(req).then(function (res) { alert(res); return res; },
function (er) { alert(er); });
这是来自webconsole的请求详细信息。我使用chrome CORS插件来避免“CORS”问题
Request URL:http://192.118.1.214:8080/remote/json-rpc
Request Method:OPTIONS
Status Code:500 Internal Server Error
Remote Address:192.118.1.214:8080
Response Headers
view source
cache-control:no-cache, no-store, must-revalidate, max-age=0
content-length:810
content-type:text/html; charset=UTF-8
date:Tue, 01 Mar 2016 08:00:50 GMT
pragma:no-cache
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:accept, cache-control, content-type
Access-Control-Request-Method:GET
Connection:keep-alive
Host:192.118.1.214:8080
Origin:http://evil.com/
Referer:http://localhost:8100/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
我在POSTMAN扩展中使用了相同的url和post方法,但是在上面的代码中没有使用它。
在
下找到POSTMAN输入我有三个疑问:
1.为什么上述请求细节中没有提到数据。
2.为什么该方法显示为“选项”,但我使用“POST”方法
3.为什么它不能通过代码工作,但在chrome POSTMAN扩展客户端
中工作正常请指导我解决这个问题。
答案 0 :(得分:1)
为什么上述请求详细信息中未提及数据。
如果服务器在有权限的情况下响应OPTIONS请求,则数据将在浏览器发送的POST / PUT请求中。
为什么该方法显示为“选项”,但我使用“POST”方法
由于您发送的是带有JSON格式正文的请求,因此您正在触发预检OPTIONS请求。
另见Why am I getting an OPTIONS request instead of a GET request?
我使用chrome CORS插件来避免“CORS”问题
...它似乎无法处理OPTIONS请求,至少在服务器以500 Internal Server Error
响应时不会。
修复您的服务器,以便它可以响应OPTIONS请求。
为什么它不能通过代码工作,但在chrome POSTMAN扩展客户端
中工作正常
因为当你使用邮递员时,没有涉及第三方,因此不必担心信任问题。另请参阅XMLHttpRequest cannot load https://www.[website].com/