【问题标题】:Request header field Access-Control-Request-Methods is not allowed by Access-Control-Allow-Headers in preflight response预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Request-Methods
【发布时间】:2016-11-11 00:09:49
【问题描述】:

我正在尝试从我的网站向远程服务器发送 POST 请求,但遇到了一些 CORS 问题。

我在互联网上进行了搜索,但没有找到针对我的具体问题的解决方案。 这是我的 ajax 请求参数:

var params = {
    url: url,
    method: 'POST',
    data: JSON.stringify(data),
    contentType: 'json',
    headers: {
        'Access-Control-Request-Origin': '*',
        'Access-Control-Request-Methods': 'POST'
    }

在后端是我在 python 中的代码:

@app.route(SETTINGS_NAMESPACE + '/<string:product_name>', methods=['POST', 'OPTIONS'])
@graphs.time_method()

def get_settings(product_name):
    settings_data = helper.param_validate_and_extract(request, None, required=True, type=dict, post_data=True)
    settings_data = json.dumps(settings_data)
    response = self._get_settings(product_name, settings_data)
    return output_json(response, requests.codes.ok, headers = {
        'Access-Control-Allow-Origin': '*', 
        'Access-Control-Allow-Methods': 'POST'
    })

我的控制台出现错误:

XMLHttpRequest 无法加载 [http://path-to-my-server]。请求头域 Access-Control-Request-Methods 不允许 预检响应中的 Access-Control-Allow-Headers

我确实注意到我也可以添加 'Access-Control-Request-Headers',但我不确定它是否有必要,它会给我带来更多问题,所以我删除了它。

有谁知道如何解决这个问题?

【问题讨论】:

  • 您的 ajax 请求不应发送 Access-Control 标头,只有服务器发送这些标头。
  • 谢谢,它成功了。将其发布为答案,我会批准

标签: javascript jquery python ajax cross-domain


【解决方案1】:

您的 ajax 请求不应发送 Access-Control 标头,只有服务器发送这些标头以允许服务器描述允许使用 Web 浏览器读取该信息的源集。

同源策略通常不适用于外部浏览器,因此如果浏览器能够获取数据,服务器必须发送 CORS 标头或 JSONP 数据。

浏览器不会将这些标头发送到服务器,它也不必,它是服务器决定数据是否可用于特定来源。

params 对象中删除header 选项,它应该可以工作

【讨论】:

    猜你喜欢
    • 2019-02-21
    • 2017-12-02
    • 2016-05-15
    • 2016-04-24
    • 1970-01-01
    • 2020-10-31
    • 2019-12-12
    • 2018-03-02
    • 2017-12-20
    相关资源
    最近更新 更多