我正在尝试使用 javascript 将交易提交到 Hyperledger Sawtooth v1.0.1 到在 localhost 上运行的验证器。post请求的代码如下:
request.post({
url: constants.API_URL + '/batches',
body: batchListBytes,
headers: { 'Content-Type': 'application/octet-stream' }
}, (err, response) => {
if (err) {
console.log(err);
return cb(err)
}
console.log(response.body);
return cb(null, response.body);
});
事务在从后端 nodejs 应用程序提交时得到处理,但从OPTIONS http://localhost:8080/batches 405 (Method Not Allowed)
客户端提交时返回错误。这些是我尝试过的选项:
Access-Control-Allow-*
使用扩展将标头注入响应:响应仍然给出相同的错误删除自定义标头以绕过预检请求:这会使验证器抛出错误,如下所示:
... sawtooth-rest-api-default | KeyError: "Key not found: 'Content-Type'" sawtooth-rest-api-default | [2018-03-15 08:07:37.670 ERROR web_protocol] Error handling request sawtooth-rest-api-default | Traceback (most recent call last): ...
来自浏览器的未修改POST
请求从验证器获取以下响应标头:
HTTP/1.1 405 Method Not Allowed
Content-Type: text/plain; charset=utf-8
Allow: GET,HEAD,POST
Content-Length: 23
Date: Thu, 15 Mar 2018 08:42:01 GMT
Server: Python/3.5 aiohttp/2.3.2
所以,我猜OPTIONS
方法没有在验证器中处理。GET
添加 CORS 标头后,对状态的请求可以正常进行。在 Sawtooth v0.8 中也没有遇到这个问题。
我正在使用 docker 启动验证器,启动它的命令是 LinuxFoundationX: LFS171x 课程中给出的命令的略微修改版本。相关命令如下:
bash -c \"\
sawadm keygen && \
sawtooth keygen my_key && \
sawset genesis -k /root/.sawtooth/keys/my_key.priv && \
sawadm genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800
有人可以指导我如何解决这个问题吗?