我创建了一个需要从浏览器调用的 AWS API Gateway 终端节点。这是一个简单的 jquery ajax 帖子:
$.post(
'https://jhntqqm19l.execute-api.us-east-1.amazonaws.com/dev',
{}
)
(在这里拨弄:https://jsfiddle.net/7cfyr1mL/)
浏览器表示端点未返回适当的 CORS header :
No 'Access-Control-Allow-Origin' header is present on the requested resource.
但是,当我从 python 请求此端点时,我看到 header 确实存在:
# testing OPTIONS request
>>> res = requests.options('https://jhntqqm19l.execute-api.us-east-1.amazonaws.com/dev')
>>> print(res.headers)
200
>>> print(res.status_code)
{'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', ...}
# testing POST request
>>> res = requests.post('https://jhntqqm19l.execute-api.us-east-1.amazonaws.com/dev', json={})
>>> print(res.headers)
{'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', ...}
>>> print(res.status_code)
400
我的标题有什么问题吗?我如何更改它们以使浏览器满意?
最佳答案
如果您的服务器端代码收到非 JSON 编码的 POST 请求,则会抛出 500 错误,并且不会设置 Access-Control-Allow-Origin
header 。
jQuery POST 默认使用标准形式 URL 编码,因此您必须覆盖它。
$.ajax(
'https://jhntqqm19l.execute-api.us-east-1.amazonaws.com/dev',
{ contentType: 'application/json', data: JSON.stringify({}), method: "post"}
);
您还需要更改服务器端代码以允许预检请求,因为目前您不允许使用 CORS 的 JSON 格式的请求。
关于javascript - 无法正确指定 CORS 请求的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57459048/