javascript - 无法正确指定 CORS 请求的 header

标签 javascript ajax cors

我创建了一个需要从浏览器调用的 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/

相关文章:

javascript - 使用 AJAX 提交帖子后,使用 AJAX 显示帖子

javascript - CORS 错误 - Angularjs $http.post

javascript - 多选,当选择某一选项时,取消选择其他选项

javascript - 通过按钮点击事件setInterval和clearInterval

javascript - 对象[对象对象]没有方法 'select2'

javascript - Backbone : Order of models inside a collection

javascript - Stack Overflow 站点如何快速执行类似 Ajax 的功能?

javascript - Yii Framework 2.0 检查是否是来自 AJAX 的 GET 请求

javascript - 使用 jQuery 和 Tornado 进行跨源资源共享 (CORS)

azure - 上传到 Azure Blob 时请求的资源上不存在 'Access-Control-Allow-Origin' header