我在使用docker dynamodb-local容器进行跨域访问时遇到问题。我旋转容器,放入一些生成的数据,然后在浏览器的脚本中(使用AWS SDK)在本地连接到该容器。它可以从docClient.get(...)
中提取第一项(常规数据条目)。然后,我浏览到另一个路径,其中运行docClient.batchGet(...)
,发生Cross-Origin Request Blocked
错误。我不知道为什么。
我在dynamodb-local中设置了-cors "*"
,我确实认为我的操作系统可能以某种方式阻止了cors,但是我没有运行/安装NGINX或apache(或其他)。我认为,没有防火墙在运行,在我的Linux系统上没有其他干扰。我确信泊坞窗本身并不在乎,并且让容器担心CORS。问题仍然存在,并在Chromium和Firefox中进行了测试。
步骤:
Docker:
https://github.com/cnadiminti/docker-dynamodb-local
的克隆其中docker-entry.sh
更改为:
#!/user/bin/env bash
set -e
exec java -Djava.library.path=/var/dynamodb_local/ ${JAVA_OPTS} -jar /var/dynamodb_local/DynamoDBLocal.jar -part ${DYNAMODB_PORT} -cors "*" "$@"
由docker run -d -p 8000:8000 --name dynamodb my-dynamodb
旋转而成。
然后生成数据并将其放置在数据库中。
在浏览器(Vue和Webpack)(Fetcher.js)中:
import AWS from 'aws'
AWS.config.update({
region: 'ca-central-1',
accesssKeyId: 'local',
secretAccessKey: 'local',
endpoint: 'http://localhost:8000',
sslEnabled: false,
maxRetries: 5
})
const docClient = new AWS.DynamoDB.DocumentClient()
docClient.get({
Key: {
hash: 'general-info',
},
TableName: 'test'
}, (err, data) => {...})
docClient.batchGet({
RequestItems: {
'test': {
Keys: [...]
}
}
}, (err, data) => {...})
错误:
Access to XMLHttpRequest at 'http://localhost:8000/' from origin 8080/test:1 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
POST http://localhost:8000/ 400 (Bad Request) aws-sdk.min.js:53
Error: Network Failure Fetcher.js:151
at XMLHttpRequest.<anonymous> (aws-sdk.min.js:53)